网站地图    收藏   

主页 > 后端 > 网站安全 >

URL地址传参问题(防止黑客攻击) - 网站安全

来源:自学PHP网    时间:2015-04-17 15:08 作者: 阅读:

[导读] 在java里,有一个PreparedStatment的东西,不知道.net里有没有,这个东西比较身心,如果.net里有类似的东西,可以用。另外,还有种方法,输入参数里过滤 and select这些sql关键字,但是这个...

在java里,有一个PreparedStatment的东西,不知道.net里有没有,这个东西比较身心,如果.net里有类似的东西,可以用。

另外,还有种方法,输入参数里过滤 and select这些sql关键字,但是这个方法不是很先进。这样过滤,如果正常业务里有这些关键字就不行了。

sql的注入在于组装别有用心sql的语句。例如:

insert into table (id,content) values ((SELECT 1 FROM USER WHERE ROWNUM <2),xxxx)

select * from table where id=1 OR 1=1

select * from table where name=XX OR 1=1

对于上面的情况,我们只要保证2件事即可防止SQL注入:

1. 对于数字,必须保证是数字,而不是"1 or 1=1"
2. 对于字符串,只需转义单引号, 变成select * from table whee name=XX OR 1=1。(我不清楚有的数据库是否需要过滤双引号)。

由于判断一个参数是不是只包含数字效率不是很高,where id=1 这种写法可以写成 where id=1.这样以来,只需要对所有参数转义单引号即可。

把所有参数打上引号,而不考虑是数字和字符串。这样没有问题。反而是一个好习惯。因为有的数据库设计,有可能设计ID的类型为字符串。如果这样的设计,id=1这样的写法用不上id这个字段的索引

以上是我的经验,数据库特制Oracle数据库,其他数据库我不熟悉,估计差不多

 

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论