2011-11-22 48 views
0

我已經爲我的用戶創建了一個文本框來輸入他們的評論。因此,他們有時會複製應用程序中出現的錯誤,並將其與評論一起粘貼到文本框中。它可能包含非法字符(例如</11>),但應保存但我的.aspx不允許。我不知道如何處理這個問題。謝謝!允許文本框中的非法字符

+1

_「我的.aspx不允許」_您使用什麼代碼來保存,您得到了什麼錯誤? – CodeCaster

+0

考慮我的答案:用JavaScript來處理由用戶插入的文本,但保留RequestValidation。 –

回答

2

如果你想用戶編輯文本框並輸入html標籤你可以通過

<%@ Page validateRequest="false" ...> 

或在web.config中爲您的整個應用程序:

<system.web> 
    <page validateRequest="false" /> 
</system.web> 

注意這個ValidateRequest屬性是不存在的,而不 原因。當您更改其默認值時,不安全的輸入將會被接受,即 。正因爲如此,你需要每一個用戶的輸入進行驗證,以 避免交叉站點腳本攻擊,如惡意 啓用JavaScript,ActiveX,閃存插入或HTML


另一種聰明的解決辦法就是通過JavaScript更換用戶編寫的文本,以確保安全性。
< anyword>,而不是<anyword>被認爲是安全的!

function validateTxt() { 
    $("textarea, input[type='text']").change(function() { 
     html = $(this).val(); //get the value 
     //.replace("a" , "b") works only on first occurrence of "a" 
     html = html.replace(/< /g, "<"); //before: if there's space after < remove 
     html = html.replace(/</g, "< "); // add space after < 
     $(this).val(html); //set new value 
    }); 
} 

$(document).ready(function() { 
     validateTxt(); 
}); 
+0

感謝您的回覆。你的意思是,我們可以通過非法角色之前或之後的空間來解決這個問題。如果是這樣,我們必須爲所有非法字符做什麼? – dotnetrocks

+0

我的解決方案解決了「<」字符的問題,這是非法的,因爲它允許用戶生成HTML標籤。 「」是一個標籤,而不是「< anyword>」(有一個空格)不被視爲標籤,而是允許的。你知道什麼其他非法角色? –

3

我假設你正在談論像一個異常消息「從客戶端檢測到有潛在危險的Request.Form值...」

是在行動asp.net請求驗證。這可以在頁面或網站級別禁用,但這樣做有風險。

它在頁面指令或web.config中使用ValidateRequest =「false」完成。

更多信息這裏: http://www.asp.net/learn/whitepapers/request-validation

+0

感謝您的回覆!如果我使用ValidateRequest =「false」,我將在頁面中有其他控件,這將被驗證。 – dotnetrocks

+0

ValidateRequest是一種防止腳本攻擊的方法;如果你禁用它,你接受指甲輸入。驗證器(ASP:RequiredFieldValidator,ASP:CompareValidator等)將起作用。無論如何,請看我的答案。 –

+0

在頁面級別執行此操作將會禁用整個頁面的驗證以及所有控件 - 所以要小心。在web.config中這樣做會禁用整個網站 - 所有網頁上的所有控件 - 所以要小心。你的驗證仍然會執行。 emanuele greco提出了很好的觀點,並提供了一個很好的選擇,所以我也贊同這個答案。 –

0

這可能是由於HTML被拒絕服務器端,作爲一種安全預防措施。

您可以禁用此檢查有兩種方法:

添加下列屬性頁面頁眉<%@ Page validateRequest="false" %>

或進行更改應用廣泛的Web.Config中

<configuration> 
    <system.web> 
     <pages validateRequest="false" /> 
    </system.web> 
</configuration> 
相關問題