gpt4 book ai didi

java - 是否可以使用 Java PreparedStatement 和 MySQL 存储例程进行 SQL 注入(inject)

转载 作者:太空宇宙 更新时间:2023-11-03 12:36:12 26 4
gpt4 key购买 nike

Java:

PreparedStatement stmt = myConnection.prepareStatement("CALL myStoredRoutine(?, ?, ?)");
stmt.setString(1, a);
stmt.setString(2, b);
stmt.setString(3, c);
stmt.executeQuery();

如果我的存储例程在 MySQL 中,未过滤的字符串是否有可能向我的代码中注入(inject)一些东西?

最佳答案

不,因为 PreparedStatement 是为了防止 SQL 注入(inject) 而构建的。

我看到您正在调用存储过程,所以最好使用 CallableStatement

String SQL = "{CALL myStoredRoutine(?, ?, ?)}";
CallableStatement cstmt = myConnection.prepareCall(SQL);
  • 准备好的声明

PreparedStatement 实例包含一条已编译的 SQL 语句。这就是使声明“准备好”的原因

因为 PreparedStatement 对象是预编译的,所以它们的执行速度可以比 Statement 对象快。

准备好的语句用于执行sql查询

  • 可调用语句

CallableStatement 对象提供了一种以标准方式为所有 RDBMS 调用存储过程的方法。存储过程存储在数据库中;对存储过程的调用是 CallableStatement 对象包含的内容。

关于java - 是否可以使用 Java PreparedStatement 和 MySQL 存储例程进行 SQL 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13000390/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com