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. maven中的setting文件

      localRepository默认jar包下载到本地哪个目录下 pluginGroups 把自己的插件放在这里进行管理 这样不用写groupId和artifactId     一个生命周期包含很多 ...

  2. Reachability的用法 判断用户的网络状态

    - (void)viewDidLoad { [super viewDidLoad]; // 监听网络状态发生改变的通知 [[NSNotificationCenter defaultCenter] ad ...

  3. 如何用 Python 写一个简易的抽奖程序

    不知道有多少人是被这个头图骗进来的:) 事情的起因是这样的,上周有同学问小编,看着小编的示例代码敲代码,感觉自己也会写了,如果不看的话,七七八八可能也写的出来,但是一旦自己独立写一段程序,感觉到无从下 ...

  4. 《Windows内核安全与驱动开发》阅读笔记 -- 索引目录

    <Windows内核安全与驱动开发>阅读笔记 -- 索引目录 一.内核上机指导 二.内核编程环境及其特殊性 2.1 内核编程的环境 2.2 数据类型 2.3 重要的数据结构 2.4 函数调 ...

  5. [ch04-04] 多样本单特征值计算

    系列博客,原文在笔者所维护的github上:https://aka.ms/beginnerAI, 点击star加星不要吝啬,星越多笔者越努力. 4.4 多样本单特征值计算 在前面的代码中,我们一直使用 ...

  6. universal link使用

    iOS9之后,苹果推出了universal link方案,该方案较url scheme有明显的改善.url scheme很难做到唯一. 而 universal link却是你自己控制的. 1.有一个H ...

  7. UIView的作用

    UIView [UIView的作用] 主要用来显示应用程序的内容,可以作为label.button等控件的容器.表示屏幕上的一块矩形区域,同时可以处理该区域的绘制和触屏事件. MVC,MVVM等设计架 ...

  8. 快速掌握zabbix配置

    有人说zabbix难点在配置,面对很多的配置项,不知道所以然了,其实我觉得这是没掌握好zabbix的学习方法,要掌握了zabbix的学习思路,可以在一个小时内快速掌握zabbix的各种配置,下面我将重 ...

  9. python学习笔记-生成随机数

    更多大数据分析.建模等内容请关注公众号<bigdatamodeling> 在实现算法时经常会用到随机数,有时会忘记各种随机数的生成方法,这里对Python中的随机数生成方法进行汇总,以供以 ...

  10. django上传并显示图片

    环境 python 3.5 django 1.10.6 步骤 创建名为 testupload的项目 django-admin startproject testupload 在项目testupload ...