关于sql注入
2016-03-29 20:05
281 查看
最近公司内的一段代码被安全中心扫出了 sql 注入漏洞,hacker 可以直接通过构造参数获取数据库结构、内容,甚至写数据,危害非常大,当然我们也在第一时间修复了,幸好没有造成太大影响,这里做一下总结:
1. sql 注入原理
所谓 sql 注入就是通过把 sql 命令插入到 Web 表单或页面请求的查询字符串,最终达到欺骗服务器执行恶意的 sql 命令的目的。举例:
2. 防范措施
参数校验
参数校验!参数校验!参数校验!参数校验做好了基本就没有了 sql 注入,假若本来期望的就是整形,那么就严格校验参数是整形,不是就拒绝。
这里要特别注意下字符串,web 开发语言都有类似 sql escape 的函数来预处理一下字符串,那么字符串参数传入时一定要用这类函数预处理。php 是 mysql_escape_string 和 mysql_real_escape_string
使用成熟的 orm
使用成熟的 orm 而不是通过裸写 sql 的方式访问数据库。成熟 orm 一般都会有防止 sql 注入的逻辑,且逻辑清晰易于管理。裸写 sql 晦涩难懂,容易出错,尽量避免。
限制业务代码 sql 操作权限
业务逻辑代码的 sql 操作权限只限制在增、删、查、改,而不要其他的 drop 等危险操作,甚至于删数据的操作都可以改为变更数据的状态。
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 等危险操作,甚至于删数据的操作都可以改为变更数据的状态。
相关文章推荐
- 在linux下安装Mongodb
- SQL注入攻击和防御
- 利用Oracle分析函数实现多行数据合并为一行
- MySQL的触发器
- 中国县级和以下行政区编码,2013年,sql文件
- win10下MySQL的zip安装记录
- ORACLE数据库删除表中记录报record is locked by another user
- MySQL开启慢查询
- mysql常用操作 mysql备份与恢复
- mysql配置的讲解 mysql的root密码重置 mysql的登录
- ubuntu下通过unixODBC连接MS SqlServer2005
- 【小白学数据库】SQL批量模糊查询
- 关于oracle数据库(11)
- MySQL 索引
- mysql insert操作
- 前一段时间的渗透学习总结(一)
- SQL 模糊查询条件的四种匹配模式
- 关于oracle数据库(10)函数
- java、memcached的配置及使用。
- mysql导入导出sql文件