作为程序员一定要保持良好的睡眠,才能好编程

php防止sql注入之万能密码以及防范

发布时间:2016-10-11

说什么叫sql注入呢?

就是在登录、注册、input中输入一些影响sql语句的代码

导致你的sql语句出现问题,比如说这个问题:

dd1.png


select * from web_manage where username='xxx' and pass='ddd' or '1'


所有的sql注入或攻击就是破坏原有的sql语句,然后执行or  这样就可以得到数据了,犹如上面截图所示。


万能用户名看看是怎么回事:


我们还是以登录为准


select * from web_manage where username='xiaosong' and pass=md5("123") limit 1;


这是正确的一个sql语句,那么如何通过注入呢?  # 这就可以防止后面的代码执行

看看这句代码

dd2.png


xiaosong 像这样的内容都是 input来的,我们需要对这些数据进行转义


以下这两种方式都可以防止: 

addslashes()

mysql_real_escape_string()


就是在收集数据的时候,把内容转义。


select * from web_manage where username='xiao\'song or 1 #' and islogin =1 \G;

dd3.png


再说一点就是删除

delete from web_manage where id =1 or 1

这句话就把所有的数据全部删除了

因为加了or


php代码

id= 1 or 1

$id=$_GET['id'];

$sql="delete from web_manage where id = $id " ;

就是这样一拼接就玩完了:

delete from web_manage where id =1 or 1

全部删除了,

那么有什么解决方案呢:

把id转换成 数字类型


1、intval

2、让他参与运算,隐士转换成数字。


就是这样就可以防范 id 的delete方法。


XSS攻击


Xss:Cross site Script 攻击

通过动态的代码,插入css、js代码,进行攻击

就是没有将这些代码实体输出,比如在input中输入了


通过这文化函数进行转义保存,把< > 转义成  &gt;  &lt; 这样的字符保存

htmlspecialchars()

htmlentites()  反转义 转回实体

htmlspecialchars_decode() 转回实体

strip_tags() 去掉html标签和php标签

</table></div>  这样的代码如果你没有 htmlentites() 实体转义 就会造成页面混乱。