下面是错误info从客户端(NewsEditor="<h2>我想试验一下而已,</h2>
...")中检测到有潜在危险的 Request.Form 值。说明: 请求验证过程检测到有潜在危险的客户端输入值,对请求的处理已经中止。该值可能指示存在危及应用程序安全的尝试,如跨站点脚本攻击。若要允许页面重写应用程序请求验证设置,请将 httpRuntime 配置节中的 requestValidationMode 特性设置为 requestValidationMode="2.0"。示例: <httpRuntime requestValidationMode="2.0" />。设置此值后,可通过在 Page 指令或 <pages> 配置节中设置 validateRequest="false" 禁用请求验证。但是,在这种情况下,强烈建议应用程序显式检查所有输入。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkId=153133。 异常详细信息: System.Web.HttpRequestValidationException: 从客户端(NewsEditor="<h2>我想试验一下而已,</h2>
...")中检测到有潜在危险的 Request.Form 值。我查过了,按照info中的提示可以这么做
解决方法:
  这是.net Framework 1.1中新增的功能,可以防止恶意脚本的攻击。
  解决方法有两种:
  方法1. 在.aspx页面中添加:
  < %@ Page validateRequest="false" %>
  方法2. 修改Web.Config文件:
  < CONFIGURATION>
   < SYSTEM.WEB>
    < PAGES validateRequest="false" />
   < /SYSTEM.WEB>
  < /CONFIGURATION>  我的问题是,这样做会不会造成什么损失,即会不会降低网页的安全性啊???

解决方案 »

  1.   

    不会的。需要注意SQL的拼写。还有例如编辑器上传图片的文件夹权限之类的。
      

  2.   

    validateRequest="false" 属性可以只用在单个页面里,直接写到 <page 里,这样稍微好点写到CONFIG里的就是所有页面都应用了
      

  3.   

    这个根本不是SQL注入的问题,而是跨站点脚本攻击。简单地说,我可以通过输入一段javascript,html等代码到你的textbox中递交,然后如果你的程序逻辑里会将该textbox内容存储并且显示到页面上,那么这就是所谓脚本攻击。举个例子,你如果负责维护某银行页面,用户输入的密码(当然大部分银行使用ActiveX,只是举个例子)就能被输入javascript的攻击者很容易地得到,他只要实现看一下显示textbox中内容的页面,就能轻而易举写一个匹配的代码来重定向到自己的钓鱼网站,或者隐藏掉原有页面上的textbox,改为post到他自己的页面获取数据。
      

  4.   

    那么如果是一篇文章要写入数据库中的话,是不是还要对<>这种字符进行更换呢?但是我看了一些源码,好多并没有进行更换啊?
      

  5.   

    是,或者不是,如果你的需求确实是让用户能够自己输入HTML和JavaScript,那么就需要评估跨站点脚本攻击的可能。举个例子,如果除了递交该数据的用户外其他人不可能看到该页面那么就根本不存在跨站点脚本攻击的问题。不验证用户输入也完全可以考虑。归根结底你首先需要学习什么是跨站点脚本攻击。
      

  6.   

    只单页面在page指令里修改就可以了,另外这个页面加一个自己的验证方法,把不安全的代码全都过滤下