java web应用防止sql 注入的常规方法

摘要: 继续接上一篇文章,java web 应用程序,还有另一个比较常见的攻击漏洞,也就是 sql injection. 通常也就是我们所说的SQL 注入.其实解决的方法很简单1. 采用 orM2. 如果是原生的SQL 语句,记得用 PreparedStatements ,参数用 ?, 代替,然后赋值。

继续接上一篇文章,java web 应用程序,还有另一个比较常见的攻击漏洞,也就是 sql injection. 通常也就是我们所说的SQL 注入.其实解决的方法很简单
1. 采用 orM
2. 如果是原生的SQL 语句,记得用 PreparedStatements ,参数用 ?, 代替,然后赋值。

至于ORM ,无论是 HIBERNATE, 还是IBATIS,mybatis, 都具备防止SQL 注入的功能, 因为在框架的内容已经考虑到这些东西,所以如果用ORM 一般不会出现SQL 注入的攻击,但是也要小心,所有的东西都不是绝对的,与使用的人相关。

如果采用native sql的话,那么必须使用 PreparedStatements , 来杜绝SQL 注入。比如:

Statement statement = con.createStatement();
statement.executeQuery("Select name FROM widgets Where type = 'WidgetB'");


这段代码,本身不会有问题,但如果 type 参数是从request 中获取到的,比如为 WidgetB'";drop .....那么这时候,就产生很严重的后果,推荐用如下方式:

final String widgetType = "WidgetB";
Statement pStatement = con.prepareStatement("Select name FROM widgets Where type = ?");
pStatement.setString(1,widgetType);
pStatement.executeQuery();


用 ? 占位符,无论是参数是常量,还是从 request .中获得的,都不会产生SQL 注入的问题。

上一篇: java 防止 XSS 攻击的常用方法总结.
下一篇: spring,hibernate,ibatis in action 电子书下载
 评论 ( What Do You Think )
名称
邮箱
网址
评论
验证
   
 

 


  • 微信公众号

  • 我的微信

站点声明:

1、一号门博客CMS,由Python, MySQL, Nginx, Wsgi 强力驱动

2、部分文章或者资源来源于互联网, 有时候很难判断是否侵权, 若有侵权, 请联系邮箱:summer@yihaomen.com, 同时欢迎大家注册用户,主动发布无版权争议的 文章/资源.

3、鄂ICP备14001754号-3, 鄂公网安备 42280202422812号