微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JavaPreparedStatement如何避免或阻止SQL注入?

如何解决JavaPreparedStatement如何避免或阻止SQL注入?

sql注入的问题在于,用户输入被用作sql语句的一部分。通过使用准备好的语句,您可以强制将用户输入作为参数的内容(而不是sql命令的一部分)进行处理。

但是,如果您不使用用户输入作为已准备好的语句的参数,而是通过将字符串连接在一起来构建sql命令,那么即使使用已准备好的语句,您仍然容易受到sql注入的攻击。

考虑做同一件事的两种方法

PreparedStatement stmt = conn.createStatement("INSERT INTO students VALUES('" + user + "')");
stmt.execute();

要么

PreparedStatement stmt = conn.prepareStatement("INSERT INTO student VALUES(?)");
stmt.setString(1, user);
stmt.execute();

如果“用户”来自用户输入,并且用户输入为

Robert'); DROP TABLE students; --

然后在第一个实例中,您将被迫接管。第二,为了安全起见,Little Bobby Tables将为您的学校注册

解决方法

我知道PreparedStatements避免/防止SQL注入。它是如何做到的?使用PreparedStatements构造的最终表单查询是否为字符串?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。