您的位置:首页 > 数据库

关于sql注入

2016-03-29 20:05 281 查看
最近公司内的一段代码被安全中心扫出了 sql 注入漏洞,hacker 可以直接通过构造参数获取数据库结构、内容,甚至写数据,危害非常大,当然我们也在第一时间修复了,幸好没有造成太大影响,这里做一下总结:

1. sql 注入原理

所谓 sql 注入就是通过把 sql 命令插入到 Web 表单或页面请求的查询字符串,最终达到欺骗服务器执行恶意的 sql 命令的目的。举例:

-- 期望客户输入客户 id 查询客户信息,如 id = 5,查询语句为:

select * from User.user where id = 5;

-- 结果客户输入的客户 id 为 " 1 or 1",查询语句为:

select * from User.user where id = 1 or 1;

-- 结果是全部的客户信息都被 dump 出来


2. 防范措施

参数校验

参数校验!参数校验!参数校验!参数校验做好了基本就没有了 sql 注入,假若本来期望的就是整形,那么就严格校验参数是整形,不是就拒绝。

这里要特别注意下字符串,web 开发语言都有类似 sql escape 的函数来预处理一下字符串,那么字符串参数传入时一定要用这类函数预处理。php 是 mysql_escape_string 和 mysql_real_escape_string

使用成熟的 orm

使用成熟的 orm 而不是通过裸写 sql 的方式访问数据库。成熟 orm 一般都会有防止 sql 注入的逻辑,且逻辑清晰易于管理。裸写 sql 晦涩难懂,容易出错,尽量避免。

限制业务代码 sql 操作权限

业务逻辑代码的 sql 操作权限只限制在增、删、查、改,而不要其他的 drop 等危险操作,甚至于删数据的操作都可以改为变更数据的状态。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: