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等方法进行赋值;
参考链接中有个知乎链接,还是很不错的,推荐可看;
 
可参考:
 

防止sql注入的最好方式的更多相关文章

  1. PHP之防御sql注入攻击的方式

    长期以来,web的安全性存在着巨大的争议与挑战.其中,sql注入就是一种常见的一种攻击方法,开发人员普遍的做法就是不停的过滤,转义参数,可是我们php大法天生弱类型的机制,总是让黑客有机可乘,绕过防御 ...

  2. 企业安全_检测SQL注入的一些方式探讨

    目录 寻找SQL注入点的 way MySQL Inject 入门案例 自动化审计的尝试之旅 人工审计才能保证精度 寻找SQL注入点的 way 在企业中有如下几种方式可以选择: 自动化 - 白盒基于源码 ...

  3. sql注入之查询方式及报错注入

    当进行sql注入时,有很多注入会出无回显的情况,其中不回显的原因可能是sql语句查询方式的问题导致的,这个时候我们需要用到相关的报错或盲注进行后续操作,同时作为手工注入时,提前了解或预知器sqkl语句 ...

  4. 十六:SQL注入之查询方式及报错盲注

    在很多注入时,有很多注入会出现无回显的情况,其中不回显的原因可能是SQL查询语句有问题,这时候我们需要用到相关的报错或者盲注进行后续操作,同时作为手工注入的时候,需要提前了解SQL语句能更好的选择对应 ...

  5. web安全之sql注入的防御

    自动把引号转义     1.防御sql注入的基本原则           任何时候不应该改变用户的输入                    比如用户输入单引号,那输出也要是单引号.   几种基本的防 ...

  6. Java程序员从笨鸟到菜鸟之(一百)sql注入攻击详解(一)sql注入原理详解

    前段时间,在很多博客和微博中暴漏出了12306铁道部网站的一些漏洞,作为这么大的一个项目,要说有漏洞也不是没可能,但其漏洞确是一些菜鸟级程序员才会犯的错误.其实sql注入漏洞就是一个.作为一个菜鸟小程 ...

  7. SQL注入技术专题—由浅入深【精华聚合】

    作者:坏蛋链接:https://zhuanlan.zhihu.com/p/23569276来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 不管用什么语言编写的Web应用 ...

  8. SQL注入技术专题—由浅入深【精华聚合贴】

    SQL注入技术专题—由浅入深[精华聚合贴] 不管用什么语言编写的Web应用,它们都用一个共同点,具有交互性并且多数是数据库驱动.在网络中,数据库驱动的Web应用随处可见,由此而存在的SQL注入是影响企 ...

  9. 数据库防火墙如何防范SQL注入行为

    SQL注入是当前针对数据库安全进行外部攻击的一种常见手段.现有主流应用大多基于B/S架构开发,SQL注入的攻击方式正是利用web层和通讯层的缺陷对数据库进行外部恶意攻击.将SQL命令巧妙的插入通讯的交 ...

随机推荐

  1. Python批量检测服务器端口可用性与Socket函数使用

    socket函数 简述 socket又称套间字或者插口,是网络通信中必不可少的工具.有道是:"无socket,不网络".由于socket最早在BSD Unix上使用,而Unix/L ...

  2. NIO-Channel

    目录 NIO-Channel 目录 前言 什么是Channel 通道类型 如何使用 ServerSocketChannel SocketChannel FileChannel 总结 相关文献 NIO- ...

  3. TableView 的优化

    TableView 的优化 1      TableView 优化的原理: 当我们用APP 访问新闻的时候,新闻中的内容并不是我们都喜欢的内容,因此我们会快速的滑过,但是TableView的加载机制是 ...

  4. [TimLinux] JavaScript 给表单提前之前进行验证的方法

    1. onSubmit事件 这个事件是注册到form表单上的,不是注册在input type="submit"这个input按钮上面的. 2. 注册方式 HTML内部注册:< ...

  5. 2018ACM/ICPC 焦作网络预选赛-A Magic Mirror

    Jessie has a magic mirror. Every morning she will ask the mirror: 'Mirror mirror tell me, who is the ...

  6. 【python3】Python十行代码搞定文字转语音

    前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:万能搜吧 都是copy的百度SDK文档,简单说说怎么用. 1.没安装Py ...

  7. jwt Token验证与解析

    网上似乎没有相关代码 贴上一段Token的解析认证 [TestMethod] public void TestMethod1() { string Token = "eyJhbGciOiJI ...

  8. 基于iSensor的MT9M001C12STM传感器调试总结

    iSensor APP 之 摄像头调试  MT9M001C12STM iSensor app 非常适合调试各种摄像头,已测试通过的sensor有: l  OV7670.OV7725.OV9650.OV ...

  9. Bootstrap响应式栅格系统设计

    为了方便起见,我们通过1200px宽的屏幕来讲解bootstrap中container.row.col的css属性值为何这样设置的原理 在1200px屏幕中为何container的宽度设置为1170p ...

  10. 【系列专题】JavaScript 重温系列(22篇全)

    JavaScript 初级篇 [JS]120-重温基础:语法和数据类型 [JS]121-重温基础:流程控制和错误处理 [JS]122-重温基础:循环和迭代 [JS]123-重温基础:函数 [JS]12 ...