1. 避免 SQL injection 攻击的传统方法之一是,把它作为一个输入合法性检查的问题来处理,只接受列在白名单中的字符,或者识别并避免那些列在黑名单中的恶意数据。白名单方法是一种非常有效方法,它可以强制执行严格的输入检查规则,但是参数化的 SQL 指令所需维护更少,而且能提供更好的安全保障。而对于通常采用的列黑名单方式,由于总是存在一些小漏洞,所以并不能有效地防止 SQL injection 威胁。例如,攻击者可以:
  2. — 把没有被黑名单引用的值作为目标
  3. — 寻找方法以绕过对某一转义序列元字符的需要
  4. — 使用存储过程来隐藏注入的元字符
  5. 上述所提到的1,2,3,4,5,白黑名单的方式则是来自于下面的文章Foritfy --Detail --Sql注入中的相关解释;
 
除了上述所提到的白黑名单的方式以外,在Sql注入中Java的最好实现方式则是,通过使用预编译的手段来实现,JDBC的实现则是使用PreparedStatement .setString(0,"")等的方式实现预编译,sql中则使用 ? 作为占位符而存在,
Hibernate中则也是通过书写hql,采用占位符的方式,再进行setParameter的方式进行参数封装即可,目前在产品中出现的一些问题则是,老的代码中存在过多的 sql 或 hql 使用 ++等方式拼接而成的执行语句,导致Fortify安全测试扫描时,出现过多的sql注入问题,
那么除此之外,为什么使用SetParameter等预编译的形式,可以阻断sql注入等的情况的发生呢,我们是否也可以模拟一个sql预编译前的代码效果,在执行sql前,先进行一下过滤呢?(似乎有点是类似于白黑名单的方式),但此处更想表明的是setParameter所做的那些操作,避免了sql注入的问题,下面简单的贴一些jdbc中setString时所做的一些操作,并不是所想象中的,直接按照位置,和形参中所得到的sql,进行一下简单的替换而已噢,在jdbc中set赋值时,还是相对交于复杂的,
(注:mybatis中,在进行传参时,就是直接使用的 ?的形式进行占位赋值,所以基本上现有的常用orm框架mybatis以及hibernate,包括jdbc都已经解决了sql注入的问题,只要使用得当一般是都没什么问题的)。
jdbc中setString时的部分源码截图:
如上所展示的3个截图,其实也只是setString时的 2/3 的代码,所以可以看到,在sql防注入的方式上,jdbc的PreparedStatement类中所做的处理操作还是很多的,
在直接setObject的时候:
PreparedStatement的操作则是使用 instanceof 判断 所要占位符赋值的类型,然后再调用相关的setInteger(),setString等方法进行赋值;
参考链接中有个知乎链接,还是很不错的,推荐可看;
 
可参考:
 

最新文章

  1. Robot Framework 安装步骤
  2. 高可用mysql之MHA的原理
  3. knockoutjs扩展与使用
  4. IE6 跟随滚动解决方法
  5. CSS中如何实现未知尺寸图片垂直居中
  6. CSS多列布局
  7. ButterKnife--View注入框架
  8. FZU 2193 So Hard (有限小数转换最简分数)(想法题)
  9. C++_Eigen函数库用法笔记——Block Operations
  10. WebDriver 在使用 CSS Selector 与 XPath 在查找元素时如何取舍
  11. matlab 不要图像界面
  12. 通过web代理进行跨域访问,http请求返回超时的问题定位
  13. MySQL的环境变量
  14. DelphiXE8怎么使用调试模式(朱建强)
  15. MongoDB和Redis区别
  16. 用phpstudy搭建dedecms网站验证码出不来解决方案
  17. 安装FreeIPA以及应用时报错汇总
  18. 01炼数成金TensorFlow基本概念
  19. 【代码审计】iCMS_v7.0.7 keywords.admincp.php页面存在SQL注入漏洞分析
  20. python模块--config

热门文章

  1. python模块成像库pillow
  2. div水平垂直居中的六种方法
  3. 【Python】之format奇技淫巧的输出控制
  4. Python爬虫帮你打包下载所有抖音好听的背景音乐,还不快收藏一起听歌【华为云技术分享】
  5. 了解 MongoDB 看这一篇就够了【华为云分享】
  6. 使用ASP.NET Core 3.x 构建 RESTful API - 3.3 状态码、错误/故障、ProblemDetails
  7. cd732D Exams 二分
  8. 2018ACM/ICPC 焦作网络预选赛-A Magic Mirror
  9. (全国多校重现赛一) J-Two strings
  10. JavaScript 逻辑与(&&) 与 逻辑或(||) 运算规则