2010-06-19 59 views
0

我想查看我的編碼是否正常工作,但是我做的示例在返回到頁面後僅恢復爲非編碼。危險的查詢字符串是什麼樣的?

<a href="http://search.msn.com/results.aspx%3fq%3dIamBad">Click Here!</a> 

變回

<a href="http://search.msn.com/results.aspx?q=IamBad">Click Here!</a> 

編輯

以UrlEncode不可信輸入的URL 使用(如值在 查詢字符串)點擊 這裏!

http://msdn.microsoft.com/en-us/library/aa973813.aspx

所以我的問題是我想看看是否有工作不正常(即爲什麼它使查詢字符串部分看起來恢復正常)。

是因爲查詢字符串中沒有包含真正不尋常的東西。還是重新編碼回它的原始形式?

+0

我不明白這個問題嗎?你爲什麼要編碼?你的例子中什麼意思不好? – 2010-06-19 21:33:43

+0

根據MS,查詢字符串可能有不可信的輸入,可能有害並且會執行XSS攻擊。請參閱編輯 – chobo2 2010-06-19 21:35:32

+0

我相信這裏的每個人都知道這一點。你有什麼問題?我仍然困惑。 – 2010-06-19 21:47:54

回答

1

你根本不從通過表單提交,或通過查詢字符串來,在用戶重新顯示輸入,或者直接就重新顯示給該用戶或將其存儲在數據庫中,然後將其顯示在網站的其他用戶。

說你有一個像這樣

/default.aspx?message=%3cscript%3ealert('Hello+world')%3b%3c%2fscript%3e 

超鏈接你做什麼想要做的就是這個

string message = Request.QueryString["message"]; 
if (!string.IsNullOrEmpty(message)) 
    directlyDisplayedLiteral.Text = message; 

因爲會發生什麼樣的是,當頁面加載時,將用戶將看到一個消息框在屏幕上彈出。所有這些腳本產生的都是一個愚蠢的小消息框,但它可能會對用戶做其他惡意的事情。

相反,您希望在輸入之前對輸入進行編碼,使其變得無害。

string message = Request.QueryString["message"]; 
if (!string.IsNullOrEmpty(message)) 
    directlyDisplayedLiteral.Text = Server.HtmlEncode(message); 

因此所發生的一切是<script>alert('Hello world');</script>被寫在屏幕上,這實際上是在HTML &lt;script&gt;alert('Hello world');&lt;/script&gt;。沒有消息框,沒有腳本實際執行,它只是屏幕上的良性文本。

0

下面是一個危險查詢字符串的示例。

<a href="results.aspx?q=<script>alert('Attack')</script>">Click Here!</a> 

你真正應該測試的不只是如果URL編碼 - 但是當你的網頁上執行的攻擊會發生什麼。

+0

嗨。我不測試網址是否被編碼。我試圖通過MS XSS庫自己在服務器端對URL進行編碼。我正在嘗試驗證它是否確實進行了編碼 – chobo2 2010-06-19 22:16:15

+0

Anti-XSS庫?您是否嘗試使用httpmodule然後自動編碼您的代碼?它只適用於服務器控件。 – 2010-06-19 23:17:34