我想添加一个验证器,它可以防止在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, "");