如何防止JSP中的SQL注入?

Nad*_*ami 9 java jsp sql-injection jdbc prepared-statement

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

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

Bal*_*usC 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();
Run Code Online (Sandbox Code Playgroud)

代替

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

PreparedStatement还提供了其他类型的方便的设置方法,如setInt(),setDate(),setBinaryStream(),等等.

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

也可以看看:


归档时间:

查看次数:

14434 次

最近记录:

8 年,11 月 前