一尘不染

如何防止在JSP中进行SQL注入?

jsp

就在上周,我在做一些PHP的工作。我工作了一些解决方案来防止SQL注入。PHP一直是我的主力军,它很容易使用3个解决方案(可能更多)。一种是使用stripslashes()功能启用“魔术查询”
。另一个(推荐)是使用mysql_real_escape_string()功能。这样简单,我的问题就解决了。但是,就JSP而言,事情似乎并不那么简单。我进行了搜索,但没有找到任何内置功能来去除斜杠或进行此类操作(我相信可以使用基本的JAVA函数来实现此类功能,但是…)。

请帮助我保护我的数据库。我听说过PreparedStatement,但是真的无法理解吗?(我感到新手的真正含义)。


阅读 300

收藏
2020-06-08

共1个答案

一尘不染

只需使用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还提供了其他类型的方便的设置方法,如setInt()setDate()setBinaryStream(),等等。

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

2020-06-08