说什么叫sql注入呢?
就是在登录、注册、input中输入一些影响sql语句的代码
导致你的sql语句出现问题,比如说这个问题:
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语句,那么如何通过注入呢? # 这就可以防止后面的代码执行
看看这句代码
xiaosong 像这样的内容都是 input来的,我们需要对这些数据进行转义
以下这两种方式都可以防止:
addslashes()
mysql_real_escape_string()
就是在收集数据的时候,把内容转义。
select * from web_manage where username='xiao\'song or 1 #' and islogin =1 \G;
再说一点就是删除
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中输入了
通过这文化函数进行转义保存,把< > 转义成 > < 这样的字符保存
htmlspecialchars()
htmlentites() 反转义 转回实体
strip_tags() 去掉html标签和php标签