2012-12-06 107 views
1

我被告知要在我的一些舊的.asp頁面中找到對跨站點腳本(XSS)的修復。通過URL跨站點腳本

我做了一些關於這個問題的研究,但是我沒有找到我的問題的答案。這是我第一次聽說XSS,也是第一次看ASP(儘管這個網頁只有HTML),而且我現在還沒有進入網頁設計大約2年,所以我非常生疏。

因此,例如,我有這種形式

<form method="POST" id="CH" name="CH" action="http://some_url/some.asp"> 
<input type="hidden" name="srv" value="1" ID="srv"/> 
<TABLE border="0" cellpadding="0" cellspacing="0" width="100%" align="center"> 
    <TR valign="top"> 
      <TR> 
       <TD align="center">Input something here 
       <input name="input_something" type="text" class="field-no-fit" maxlength="12" value=""> 
       </TD> 
      </TR> 
    </TR> 
</TABLE> 
</form> 

如果我手動輸入網址(其中包含這種形式)作爲

http://this_url/this.asp?1=%22%3E%3Cscript%3Ealert%28HelloWorld%29%3C/script%3E%3Cimg%20alt=%22%22%20src=%22 

頁面將加載,然後它會拋出一個javascript提醒並顯示錯誤圖像。

我的目標是在打開頁面時停止腳本運行。 我閱讀了有關Server.HTMLEncode,但無法找到一種方法來使用它來停止頁面加載時運行腳本。

在此先感謝!

編輯:請問我能不能,至少部分,要解決它,如果我更換輸入值: 「<%= Server.HTMLEncode(請求(」 input_something 「))%>」

我無法測試它,因爲目前我無法訪問IE6,並且所有其他瀏覽器(包括IE> 6版本)都會避免該錯誤(已在安全選項卡中禁用了XSS篩選器,但它不起作用)

+0

你們是不是要防止XSS攻擊?或者你只是想停止加載頁面上的所有JavaScript? –

+0

我試圖阻止XSS攻擊是;) – Bernardo

回答

2

我不認爲這有什麼用瀏覽器?

你顯然直接寫一個查詢字符串參數的內容網頁上像這樣:

<%=Request.QueryString("1")%> 

這是不好的。

因爲你已經發現了,你應該使用

server.htmlencode(Request.QueryString("1")) 
在您的網頁,你直接在頁面上書寫用戶輸入

無處不在。

應該做的伎倆

also have a look here

0

(我對ASP不太瞭解)您可以通過啓用ASP請求驗證來輕鬆解決問題。與任何行爲改變一樣,許多事情可能會在其他頁面上崩潰(儘管這會令人驚訝),所以首先測試更改。請參閱http://msdn.microsoft.com/en-us/library/bb355989.aspx

您的服務器正在填充頁面上的所有標記,包括來自URL參數的隱藏「srv」輸入,而不對HTML標記進行篩選,然後將其粘貼到頁面中。您可以限制此表單僅響應POST,而不是GET方法,那麼您的示例攻擊將不起作用。這可能是最簡單和最無害的修復。

最後,看看您是否可以爲任何用於跟蹤會話的cookie設置cookie屬性爲HTTPOnly。

很長的上,你可以使用所有可能的措施讀爲http://msdn.microsoft.com/en-us/library/ms998274.aspx

+0

您的anwser適用於asp.net。問題是關於經典的asp – ulluoink