如何防止JSP中的SQL注入?

时间:2011-06-07 23:51:25

标签: java jsp jdbc sql-injection prepared-statement

就在上周,我正在做一些PHP的东西。我做了一些小的解决方案来防止SQL注入。 PHP一直是我的男人,它有3个解决方案可供使用(可能更多)。一种是使用stripslashes()函数启用“魔术查询”。另一个(推荐)是使用mysql_real_escape_string()功能。 那个简单,我的问题就解决了。但是,当谈到JSP时,事情似乎并不那么简单。我搜索并没有找到任何内置函数来去除斜线或做那些事情(我相信这样的功能可以使用基本的JAVA函数来实现,但是......)。

请帮我保护我的数据库。我听说PreparedStatement,但真的无法理解它? (我觉得新手的真正含义)。

1 个答案:

答案 0 :(得分:23)

只需使用PreparedStatement代替Statement

即。使用

String sql = "INSERT INTO tbl (col1, col2, col3) VALUES (?, ?, ?)";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, col1);
preparedStatement.setString(2, col2);
preparedStatement.setString(3, col3);
preparedStatement.executeUpdate();

而不是

String sql = "INSERT INTO tbl (col1, col2, col3) VALUES ('" + col1 + "', '" + col2 + "', '" + col3 + "')";
statement = connection.createStatement();
statement.executeUpdate(sql);

PreparedStatement还为其他类型提供了方便的setter方法,例如setInt()setDate()setBinaryStream()等。

请注意,此问题与JSP无关。它与Java有关。在JSP类中编写原始Java代码也被视为poor practice。最佳实践是创建一个独立的类,它在特定的表上执行所有数据库交互任务,也称为DAO(数据访问对象)类。然后,您可以在servlet类中导入/使用此DAO类。

另见: