最基本原则
永远不要相信用户提交上来的数据(包括header\cookie\seesionId),都可能造假
sql注入
原理:
后台的SQL语句通过字符串拼接后后导致执行各种意想不到的语句,配合sql语句的outfile功能,还能写入一个脚本文件到服务器。
例子:
比如根据用户post来的ID来列出单个人的信息 假设用户提交的id=1拼接出来为select * from table where id=1这时执行正常 假设用户提交的为id=1 and 1=1拼接出来为select * from table where and 1=1这时执行异常,所以内容都被查出来了
-
又如根据用户提交的job_rul=**来拼接,但是攻击者提交了job_rul=sql' or 1=1 limit 1--
//正常的语句select * from job_info where job_url='sql' limt 10//攻击者提交的 “sql' or 1=1 limit 1-- ”后 变成下面这样 注意--后面有空格
select * from job_info where job_url='sql' or 1=1 limit 1-- ' limt 10//上面语句后面 //故只会执行 select * from job_info where job_url='sql' or 1=1//所有信息都被查出来了
预防:
在SQL拼接时注意过滤替换用户输入的字符串(但是本人不推荐这种方式)
最安全的是mysql的预编译prepare,PHP的PDO将其实现了。因为语句先编译好了,用户怎么传都是一个参数。
文件上传攻击
没有过滤就接收用户上传的文件(如.php等文件)或者没有给文件重命名,最后通过攻击者通过web请求导致恶意脚本调用被执行
常见漏洞
|