关于HTML编码的相关问题请教一下哥们?

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

经过存储过程写数据库是安全的。
SQL注入原理不是操作存储过程,而是操作SQL查询语句。
最简单的例子
http://www.abc.com/show.asp?id=1
在数据库里查询用
select * from news where id=1
如果SQL注入就是构造这样的地址:
http://www.abc.com/show.asp?id=1 or 1=1
如果未限制ID参数的内容和类型,就会形成
select * from news where id=1 or 1=1
这样就绕过了原本的条件限制。接下去可以任意构造后面的参数,查询其他表的数据值等等都可以操作了。

因此防SQL攻击关注点就是在查询操作上。

而你用HTML编码,如果这个HTML也是用户自己可以随便写的,就要防止用<SCRIPT><IFRAME>等标记来欠入木马,那个即使你存数据,一旦显示出来也会被人访问到。不会影响你数据库,只会影响你的访问者

1.varchar[7000]改成text类型.

2.防止SQL注入有很多种方式.而你这样.我只是有所听闻.实际中并没有见过谁这么写的.比如QQ空间就是?没有深究过.

----------------------

不是.黑客的手段是各种各样的.使用存储过程只是可以提高安全.并不是绝对安全!

JAVA使用PreparedStatement通过提交参数的方式,可以防止注入(因为任何注入代码都变成参数提交到数据库中了,而不会变成SQL语句去执行。)
C#可以使用下面的方法使用添加参数的方式防止注入。
OleDbCommand cmd = new