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

继续接上一篇文章,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 注入的问题。

除非申明,文章均为一号门原创,转载请注明本文地址,谢谢!
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: java SQL injection
相关日志:
评论: 0 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.