假如一个表单有 文章标题与文章内容两个文本框
然后用户在文章标题里面输入<script>alert('111');</script>
我的服务端代码接到文章标题字段就编码:HttpUtility.HtmlEncode(标题)
然后保存到数据库中,那么文章标题就编码为&lt;script&gt;alert(1111);&lt;/script&gt;
,然后用户编辑这篇文章的时候。文本框里显示的是&lt;script&gt;alert(1111);&lt;/script&gt;
。这样的话看起来不直观。而且用户不修改标题点保存的话,在主页面显示的标题就是再一次编码的结果了。标题显示为
&lt;script&gt;alert(1111);&lt;/script&gt;&lt;script&gt;alert(1111);&lt;/script&gt;一段很长的了。因为再一次编码了。请问大家怎么解决的?ASP.NET

解决方案 »

  1.   

    放在textbox中,可以用HtmlDecode的。保存在数据中可以保存编码前的,需要显示成Html的时候再进行HtmlEncode,可以防止XSS攻击。
      

  2.   

    你的文本框的Text里边到底是html还是text?你的数据库表理到底是html还是text?这两者应该一致。如果不一致,就会出现这种自相矛盾的现象。如果“用户标题”输入的是html,那么你就不应该进行HtmlEncode。如果要求输入的必需是text,那么在入库之前就应该进行HtmlEncode(而不是不需Encode)。但是如果你从数据库中拿出这个数据,不是为了拼接到html页面上,而是为了再赋值给文本框的Text属性,此时就应该先进行HtmlDecode。这是两种不同的处理流程。总之不可能含混不清地处理。
      

  3.   

    恩,恩,ENCODE和DECODE要匹配啊。