4.0框架请求验证不允许代码隐藏到htmlencode文本框

时间:2011-01-08 19:56:12

标签: asp.net vb.net

我有一个表单,我一直在提交带有标点符号和特殊字符的提交,触发潜在危险的Request.Form值错误。我一直在尝试使用httpUtility.htmlencode和Server.htmlencode方法来清理文本框和textareas。

我的所有测试都没有触发,因为4.0框架的内置请求验证阻止了代码隐藏执行以执行清理。我在页面标题中包含了ValidateRequest,但无论我设置它还是做同样的事情。

这是我到目前为止的代码。

Session("RequestID") = Server.HtmlEncode(txtRequestID.Value)
Session("FirstName") = Server.HtmlEncode(txtInstFirstName.Text)
Session("LastName") = Server.HtmlEncode(txtInstLastName.Text)
Session("CNumber") = Server.HtmlEncode(txtCNumber.Text)
Session("Email") = Server.HtmlEncode(txtInstEmail.Text)
Session("Phone") = Server.HtmlEncode(txtInstPhone.Text)
Session("Department") = ddlDept.SelectedValue
Session("Location") = ddlLocation.SelectedValue

这没用,所以我尝试了这个:

Session("FirstName") = QuoteString(Trim(txtInstFirstName.Text))
Dim sanFN As String = Session("FirstName")
Server.HtmlEncode(sanFN)

我可以做些什么来完成这项工作?根据我访问过的所有网站,它应该有效。

谢谢, 泰勒


不幸的是,该项目被废弃了,我们搬到了新的架构(ruby on rails)。

2 个答案:

答案 0 :(得分:1)

他们已经改变了请求验证在ASP.NET 4.0中的工作方式,因此默认情况下关闭它的页面指令不再有效。您必须对web.config进行更改,以使其按预期运行。有两种方法可以查看此similar question

您可以在this page on the ASP.NET site中阅读更多详情。

答案 1 :(得分:0)

我认为您需要在此页面或web.config(在页面参数上)添加 validateRequest =“false”,以使其成为全局。

<%@ Page validateRequest="false" %>

有关此问题的更多内容:http://www.asp.net/learn/whitepapers/request-validation

将validateRequest设置为false后,实际上没有任何大的危险,但是您需要处理代码上的任何可能的脚本攻击,在回放输入文本时使用htmlEncode,或者进行任何其他验证回传之前让输入在页面上呈现。

备注
不要使用会话来移动并保存页面上的输入数据!这不是一个好习惯。