来源:自学PHP网 时间:2015-04-17 11:59 作者: 阅读:次
[导读] 原理很简单,数据库字符类型就只有几种。我们常用的就是数值,和字符串,还有时间。我们一般用到查询的为数值,和字符串。字符串查询格式为 where 字段=#39;查询条件#39; 这里无法注入,因...
原理很简单,数据库字符类型就只有几种。我们常用的就是数值,和字符串,还有时间。
我们一般用到查询的为数值,和字符串。
字符串查询格式为 where 字段='查询条件' 这里无法注入,因为这里加了单引号,查询条件转化为字符串类型,而不是有效的SQL语句。
而注入漏洞就存在于不加单引号的查询条件中,就是数值查询条件。这里查询格式为 where 字段=查询条件 没了单引号,就出现了注入漏洞。接下来我们就要解决这个漏洞了。
传统的方法是屏蔽注入字符,但是带来了很多不便。
现在我教大家两个新方法。
1,加单引号:查询格式变为 where cstr(字段)='查询条件' 这里将数据库里要查询的内容转换为字符串,所以后面要加上单引号,这里防止了注入。
2,先检测查询条件的类型:用isnumeric()函数,检测是否为数值,如果是再执行,数据库操作。这里就杜绝了所有字符串,更别说注入字符了。
讲完了,希望对大家有所帮助。
续:数据库查询中数值查询中 where 字段=查询条件,这里不能加单引号,除非这样 where cstr(字段)='查询条件'
法1大家谈论下吧,我觉得好象有点问题。发2我认为可行。
法1我临时想到的。发2我摸索了一段时间突然发现的,而且我正在用,非常好。
|
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com