关于sql注入
Posted lian4187
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于sql注入相关的知识,希望对你有一定的参考价值。
最近公司内的一段代码被安全中心扫出了 sql 注入漏洞,hacker 可以直接通过构造参数获取数据库结构、内容,甚至写数据,危害非常大,当然我们也在第一时间修复了,幸好没有造成太大影响,这里做一下总结:
1. sql 注入原理
所谓 sql 注入就是通过把 sql 命令插入到 Web 表单或页面请求的查询字符串,最终达到欺骗服务器执行恶意的 sql 命令的目的。举例:
1 -- 期望客户输入客户 id 查询客户信息,如 id = 5,查询语句为: 2 3 select * from User.user where id = 5; 4 5 -- 结果客户输入的客户 id 为 " 1 or 1",查询语句为: 6 7 8 select * from User.user where id = 1 or 1; 9 10 -- 结果是全部的客户信息都被 dump 出来
2. 防范措施
- 参数校验
- 使用成熟的 orm
- 使用成熟的 orm 而不是通过裸写 sql 的方式访问数据库。成熟 orm 一般都会有防止 sql 注入的逻辑,且逻辑清晰易于管理。裸写 sql 晦涩难懂,容易出错,尽量避免。
- 限制业务代码 sql 操作权限
- 业务逻辑代码的 sql 操作权限只限制在增、删、查、改,而不要其他的 drop 等危险操作,甚至于删数据的操作都可以改为变更数据的状态。
以上是关于关于sql注入的主要内容,如果未能解决你的问题,请参考以下文章
spark关于join后有重复列的问题(org.apache.spark.sql.AnalysisException: Reference '*' is ambiguous)(代码片段