HTML编码的好处,就我理解,一是防浏览器渲染,按用户输入的格式输出,二是可以一定程度防黑客的SQL注入。
我是这么做的:数据表中定义了一个varchar[7000]的字段,先把用户输入的内容HTML编码,然后再写入库。可是我发现,如果输入的内容是文字,编码前后相差无几,如果输入的内容是代码(如HTML、CSS等)的话,编码后的内容就大得很多。varchar[7000]的字段用来存汉字的话倒还能存3000多,一般用户也差不多够用了,但存代码的话,确实存不了多少。
我不懂SQL注入的原理,所以我先编码后写入。我在网上看见有人这样说:不论是什么内容,写入数据库都是安全的。这话是正确的吗?如果正确,那么就没必要先编码后写入,最好是写入原文,浏览器请求时再编码输出,这样自然就能存入更多的内容。
请教一下大侠们,你们是先编码再写入库呢,还是原文入库、输出前编码?
还有一个小小的问题,如果先写入原文的话,收到浏览请求后,许多条记录,输出前怎样编码啊?小菜我只会一个的,如string a="内容" string b=Server.HtmlEncode(a),多条记录一起输入是不是要用到遍历啊,遍历占用资源多不多?怎样实现遍历编码输出呢?
不是舍不得,真没分了。我是个菜鸟,请大侠们指点一下,很感谢啊!

解决方案 »

  1.   

    字段类型换下 text or ntext
      

  2.   

    基本是原文入库、输出前编码.在入库前做字串过滤,把危险字符都过滤掉或者替换.输出前替换回去.
    我对输出html不是很赞成,因为html是最终页面,修改很困难.而且很多动态信息加载比较困难.我现在使用的方法是输出xml,然后xsl加载css和js,通过js+xhr(也就是ajax)获取动态信息和提交访问记录.但是js跨平台很是问题,代码量也很大.我也正在考虑的改进方案有两种:
    html的话,看过一个方法是添加一个隐藏的图片节点,类似<img src="recordvisiter.asp?article_id=10000">,来记录访问.
    另一个还是基于xml,按传统方式在服务器端解析生成页面.比如article.asp?id=1000,我先找id=1000的xml文件,如果没有就创建然后解析输出.其他部分的动态信息就可以用服务器端的程序添加了.存储过程的,不懂.超长字串可以使用varchar(max)字段.(sql2005)