2011-11-04 127 views
1

我有一個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"> 

回答

0

好的。我們使用單個頁面將我們的配置文件帶到全新的站點,並系統地開始刪除部分,直到發現問題。

我們使用第三方庫的一些我們的網站控件,我們發現,除本節:我們

<httpModules> 
    <add name="CallbackManager" 
     type="Dart.PowerWEB.LiveControls.CallbackManager,Dart.PowerWEB.LiveControls"/> 
</httpModules> 

解決了這個問題(但給了我們其他地方的一些問題)。

+0

這是否意味着所討論的庫實際上是否禁用頁面的請求驗證?這是該控件的記錄功能嗎? – Erlend

+0

無論如何,請不要只依靠請求驗證來停止XSS。有XSS矢量可以繞過它。 – Erlend

+0

@Erlend - 此頁面未使用相關控件。不,它更像是一個無證的'功能':)我們已經實施了額外的驗證以及試圖追蹤這個問題。 – Paddy

1

我也有同樣的問題,但在我的情況下,它是在global.asax的Application_BeginRequest中的try-catch,它在訪問HttpContext.Current.Request.Form時遇到了錯誤,然後使它變腫。如果有一個cookie修復uploadify

1

我偶然發現這個問題,同時追查類似的問題。事實證明,頁面有問題將其數據作爲JSON發佈,並且默認的JSON模型聯編程序不執行ASP.NET請求驗證。我最終找到了伊姆蘭俾路支的一篇博客文章,描述了這種已知的行爲和解決方法:http://forums.asp.net/t/1682096.aspx?MVC3+JSON+Security

我知道這不是OP的問題,但也許其他人會覺得它有用。

1

我發現了同樣的問題,如果你安裝Glimpse

web.config中的以下行完全的發生停止請求驗證 - 不管你的一瞥設置:

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"> 
     <add name="Glimpse" type="Glimpse.AspNet.HttpModule, Glimpse.AspNet" preCondition="integratedMode" /> 
    </modules> 
</system.webServer>