asp.net禁用请求验证
在网页中录入信息并提交时,因为录入信息中可能含有物殊字符或html代码,这样网页就可能会提示出错.
常见错误信息如下:
从客户端(TextBox1="<INPUT TYPE=TEXT>")中检测到有潜在危险的 Request.Form 值。
说明: 请求验证过程检测到有潜在危险的客户端输入值,对请求的处理已经中止。该值可能指示危及应用
程序安全的尝试,如跨站点的脚本攻击。通过在 Page 指令或 配置节中设置 validateRequest=false 可
以禁用请求验证。但是,在这种情况下,强烈建议应用程序显式检查所有输入。
常用的解决方法就是禁用请求验证,但这样一来,就必须在程式中自行验证。
1.静止页面的validateRequest
<%@ Page validateRequest="false" %>
2.设置web.config
<configuration>
<system.web>
<pages validateRequest="false" />
</system.web>
</configuration>
3.使用Server.HtmlEncode方法来验证
string urlPage = "";
urlPage = UrlText.Text;
WebRequest request = WebRequest.Create(urlPage);
WebResponse response = request.GetResponse();
Stream resStream = response.GetResponseStream();
StreamReader sr = new StreamReader(resStream, System.Text.Encoding.Default);
ContentHtml.Text = Server.HtmlEncode(sr.ReadToEnd());
resStream.Close();
sr.Close();
4.允许了部分HTML标签,并禁止危险的标签。
void submitBTn_Click(object sender, EventArgs e)
{
// 将输入字符串编码,这样所有的HTML标签都失效了。
StringBuilder sb = new StringBuilder(
HttpUtility.HtmlEncode(htmlInputTxt.Text));
// 然后我们选择性的允许<b> 和 <i>
sb.Replace("<b>", "<b>");
sb.Replace("</b>", "");
sb.Replace("<i>", "<i>");
sb.Replace("</i>", "");
Response.Write(sb.ToString());
}
根据微软提供的建议,我们要慎重允许下列HTML标签,因为这些HTML标签都是有可能导致跨站脚本攻击的
。
<applet>
<body>
<embed>
<frame>
<script>
<frameset>
<html>
<iframe>
<img>
<style>
<layer>
<link>
<ilayer>
<meta>
<object>
参考:
http://www.zjqgjx.com/gjf/html/Technique/200711/20071112751400.html
http://access911.net/index.asp?board=4&recordid=71FAB51E15DCE7F3
http://support.microsoft.com/default.aspx?scid=kb;en-us;821343&Product=aspnet
http://www.hackhome.com/InfoView/Article_157127.html