防止在Asp.Net文本框验证中注入html



我想添加一个验证器,它可以防止在Asp.Net注入上进行html注入。我正在使用以下代码:

<asp:TextBox ID=";TxtBoxMultiLine";runat=";服务器";TagName=";textBoxValidation";宽度=";50%";AutoPostBack=";"错误";自动完成=";关闭";text模式=";MultiLine">lt/asp:TextBox>

<asp:CustomValidator ID=";CustomValidator1";runat=";服务器";ErrorMessage=";HTML标记不允许"ControlToValidate=";TxtBoxMultiLine";ClientValidationFunction=";ValidateTitle";ValidationGroup=";htmlValidation">lt/asp:CustomValidator>

<asp:Button Text=";保存";ID=";addSaveBttn";CssClass=";保存简单形状1";runat=";服务器";OnClick=";addSaveBttn_Click";ValidationGroup=";htmlValidation"/>

我正在使用javascript函数来验证我的文本框

function ValidateTitle(event) {
str = (document.getElementById('textBoxValidation')).value;
if (str.match(/([<])([^>]{1,})*([>])/i) == null) {            
event.IsValid = true;
}
else {        
event.IsValid = false;
}
}

当我按下按钮时,出现异常:一个潜在危险的请求。从客户端检测到表单值

这似乎忽略了我的验证。此外,我不想在我的页面上放这个元素:ValidateRequest=false

您可以使用客户端脚本,如:

function ValidateTitle(event,args) {
str = (document.getElementById('textBoxValidation')).value;
if (str.match(/([<])([^>]{1,})*([>])/i) == null) {            
args.IsValid = true;
}
else {        
args.IsValid = false;
}
}


<asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="HTML Tags Not Allowed" ControlToValidate="TxtBoxMultiLine" ClientValidationFunction="ValidateTitle" ValidationGroup="htmlValidation" EnableClientScript="true" Display="Dynamic"></asp:CustomValidator>

你可以纠正一些错误。

str = (document.getElementById('textBoxValidation')).value;

str = (document.getElementById('TxtBoxMultiLine')).value;

您必须将所有输入设置为某个验证组

并且必须为WebForms添加脚本资源UnobtrusiveValidationMode需要"jquery"错误的ScriptResourceMapping。此外,您的正则表达式不能完全检测html代码,您将正则表达式从更改

if (str.match(/([<])([^>]{1,})*([>])/i) == null) {   

if (str.match("<[^>]*>") == null) { 

可能您需要更复杂的regex。

为了避免异常:从客户端检测到潜在危险的Request.Form值在<system.web>元素内添加以下内容。

<sessionState mode="InProc" cookieless="UseUri"/>

验证您的输入后,下面将使用regex在文本框中剥离HTML标记。

const rx = /(<([^>]+)>)/ig
const result = str.replace(rx, "");

最新更新