sql注入原理及防范

一: sql注入原理

原理就是利用服务器执行sql参数时的特殊性,将正常的数据库字段注入特征字符组成新的SQL语句,导致原来的sql语句“变了味”

举一个简单的例子
$id = $_GET['id'];  /// id= 10001 OR 1 = 1 #
$qq = $_GET['name']; // name= "12444' OR 1 = 1 #"
$sql = "SELECT * FROM `user` WHERE id=$id AND $name = '".$name."'";
$results = $db->query($sql);

二: 如何防范:

必要步: php.ini内开启magic_quotes_gpc=On

1. web参数过滤,只允许约定的字符出现

2. 拼装的sql语句用mysql_real_escape_string方法进行过滤
$username = mysql_real_escape_string($_GET['username']);

3. mysql用户权限设置,不要用root

4.使用rewrite,不过只是增加了hack成本而已,用firebug或Fiddler还是可以看出来的真实的请求接口及参数名

5.记录一下错误日志,定期的排查 

6. 使用一些sql注入扫描工具测试,如 SQLIer,SQLMap

7. 可以考虑使用pdo或orm,在安全方面肯定比mysql,mysqli好

附:

PDO的prepare是怎么防范SQL注入的
当调用prepare()时,查询语句先被发送给了MYSQL,此时只有占位符发送过去,没有用户提交的数据(MYSQL做预编译,一定程度上会优化查询效率,特别是对同个SQL模版进行多次调用时);当调用execute()时,用户提交的值才会传送给MYSQL。从而达到防范SQL注入的目的。.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值