gpt4 book ai didi

java - ReadyStatement 的安全性如何?

转载 作者:行者123 更新时间:2023-11-29 07:24:07 25 4
gpt4 key购买 nike

我最近了解到不使用PreparedStatements 的.set() 方法是一个相当大的安全缺陷。

查看一些代码示例后,我对PreparedStatements 及其安全性有一些疑问。

如果有人可以攻击 MySQL 查询来更改数据,PreparedStatement 的 .set() 方法到底如何防止攻击?

例如,如果查询是

INSERT INTO table_name(?, ?);

(假设两个问号都是字符串)

有人不能简单地将 table_name 更改为另一个表吗?

另一个例子;如果查询是

 UPDATE table_name SET column_name=?;

人们不能更改column_name以使查询更改不同的列吗?

我能想到的最后一个例子;如果查询是

SELECT column_name FROM table_name WHERE column2_name = ?;

攻击者是否有可能修改column_name、table_name等,或者向查询中注入(inject)其他操作?

正如您可能知道的那样,我对安全性和 MySQL 不太了解,所以如果这些是非常明显的问题,请原谅。谢谢!

最佳答案

准备好的语句中的值(value)是将变量数据与查询字符串本身分开。这提供了两个主要优点:

  1. 如果重复查询仅发送的数据不同,则查询本身不需要重新解析;相反,只需要发送新数据。

  2. 您可以免受 SQL 注入(inject)攻击,这些攻击可能会导致查询字符串中直接包含不正确的转义数据,因为您的数据与查询字符串本身是分开的,并且以安全的方式发送。

    <

准备好的语句不会(也无意)保护您免受客户端和数据库之间的中间人攻击,这些攻击可能会改变您想要的查询(或数据)发送。为此,您需要使用 SSL 传输,否则请确保攻击者无法介入您与数据库的通信。

关于java - ReadyStatement 的安全性如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35099050/

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