我有一個ASP.net應用程序的輕微問題 - XSS請求驗證(即拋出'潛在危險的request.form值...'例外),不似乎對我們來說工作正常。ASP.net XSS請求驗證沒有觸發
我對我們的網站下面簡單的測試形式:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Test2.aspx.vb"
Inherits="Test2" %>
<form id="form1" runat="server">
<asp:textbox ID="Textbox1" runat="server" ></asp:textbox>
<asp:Button ID="btnSubmit" runat="server" Text="Uh oh" />
</form>
而在我們的httpRuntime元素web.config中的以下內容:
<httpRuntime maxRequestLength="8192" />
如果我輸入下面的文成文本框:
<script>alert('XSS!');</script>
表單帖子沒有錯誤,我期望它出錯,c詮釋「潛在危險......等」。我爲按鈕添加了一個單擊事件處理程序,並調用Request.ValidateInputs(),但仍然沒有問題。看到Request變量,我可以看到屬性調用ValidateInputCalled,即使在我明確調用之前也是如此...
我們針對v4.0的框架,並且發現如果編輯httpRuntime元素:
<httpRuntime maxRequestLength="8192" requestValidationMode="2.0" />
然後頁面請求驗證開始工作,就像我所期望的(但我不認爲這應該是必要的)。在這樣的結構中唯一的另一件事是一組規則,如本:
<location path="Admin/News.aspx">
<system.web>
<httpRuntime requestValidationMode="2.0"/>
</system.web>
</location>
我們用它來讓我們關閉驗證的一組選定的頁面(在頁面級關閉),用戶被允許在其文本中提交一組選定的HTML標籤。
這絕對是以前的工作。有人知道爲什麼這可能現在不工作?我不想爲整個網站恢復到v2.0請求驗證模式。
剛剛嘗試過一個新的網站項目,單頁,與上面相同,並且請求驗證錯誤正在解僱。我們的原始網站的web.config是相當大的 - 有沒有人知道這個文件中的其他屬性可以影響請求驗證?配置文件中的頁面節點如下所示:
<pages enableEventValidation="false" enableSessionState="true"
enableViewStateMac="true"
viewStateEncryptionMode="Always"
controlRenderingCompatibilityVersion="3.5"
clientIDMode="AutoID">
這是否意味着所討論的庫實際上是否禁用頁面的請求驗證?這是該控件的記錄功能嗎? – Erlend
無論如何,請不要只依靠請求驗證來停止XSS。有XSS矢量可以繞過它。 – Erlend
@Erlend - 此頁面未使用相關控件。不,它更像是一個無證的'功能':)我們已經實施了額外的驗證以及試圖追蹤這個問題。 – Paddy