就在上周,我在做一些PHP的工作。我工作了一些解决方案来防止SQL注入。PHP一直是我的主力军,它很容易使用3个解决方案(可能更多)。一种是使用stripslashes()功能启用“魔术查询” 。另一个(推荐)是使用mysql_real_escape_string()功能。这样简单,我的问题就解决了。但是,就JSP而言,事情似乎并不那么简单。我进行了搜索,但没有找到任何内置功能来去除斜杠或进行此类操作(我相信可以使用基本的JAVA函数来实现此类功能,但是…)。
stripslashes()
mysql_real_escape_string()
请帮助我保护我的数据库。我听说过PreparedStatement,但是真的无法理解吗?(我感到新手的真正含义)。
PreparedStatement
只需使用PreparedStatement代替即可Statement。
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(),等等。
setInt()
setDate()
setBinaryStream()
请注意,此问题与JSP无关。通常,它与Java有关。在JSP类中编写原始Java代码也被认为是不好的做法。最佳实践是创建一个独立类,该类在特定表上执行所有数据库交互任务,该类也称为DAO(数据访问对象)类。然后,您可以在Servlet类中导入/使用此DAO类。