我正在处理一个以下列方式工作的网络表单。
A potentially dangerous Request.Form
我看过几篇建议在其中一个web.config部分使用.Net 2.0的文章 - 这些都没有用。我为该页面设置了requestValidation =“false”,但它也没有用。
我的直觉是,我正在做一些根本错误的事情......
HTML模板作为VarChar(4000)存储在数据库中。
我在发送电子邮件之前尝试在方法中编码文本,但这不起作用,因为Web表单永远不会执行该方法。
我还有其他选择吗?我曾尝试在数据库中存储纯文本,但后来我发布了制表符并返回等等。
谢谢
答案 0 :(得分:3)
补救措施分为两部分,你必须采取行动:
要在页面上禁用请求验证,请将以下指令添加到文件中的现有“page”指令中(您需要切换到HTML视图):
ValidateRequest="false"
例如,如果您已经拥有:
<%@ Page Language="vb" AutoEventWireup="false"
Codebehind="MyForm.aspx.vb"
Inherits="Proj.MyForm"%>
那么这应该成为:
<%@ Page Language="vb" AutoEventWireup="false"
Codebehind="MyForm.aspx.vb"
Inherits="Proj.MyForm"
ValidateRequest="false"%>
在Visual Studio的更高版本中,此属性的值可通过页面属性获得,因此只需将“ValidateRequest”设置为“False”即可。设置此方法的方法都可以达到相同的效果。
或者,您可以全局关闭请求验证(但在这种情况下,请务必执行下面的第2项)。要全局关闭请求验证,请将以下内容添加到web.config文件中:
<pages validateRequest="false" />
来自:http://www.cryer.co.uk/brian/mswinswdev/ms_vbnet_server_error_potentially_dangerous.htm
答案 1 :(得分:1)
作为第一个安全课程,永远不要信任用户输入,因此如果您将请求验证设置为false,则始终对输入进行HTML编码。 在基本使用:OnClient点击提交和替换,&lt;与&amp; LT;和&gt;与&amp; GT; (没有&amp;和gt / lt的空格)
或者在提交方法上,使用Server.HTMLEncode(inputtext)..或者你处理它。