Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 准备好的报表有多安全?_Java_Mysql_Security_Jdbc_Prepared Statement - Fatal编程技术网

Java 准备好的报表有多安全?

Java 准备好的报表有多安全?,java,mysql,security,jdbc,prepared-statement,Java,Mysql,Security,Jdbc,Prepared Statement,我最近了解到,不使用PreparedStatements的.set()方法是一个非常严重的安全缺陷 在看了一些代码示例之后,我对PreparedStatements及其安全性提出了一些问题 如果有人可以通过攻击MySQL查询来更改数据,PreparedStatement的.set()方法到底如何防止攻击 例如,如果查询是 INSERT INTO table_name(?, ?); UPDATE table_name SET column_name=?; SELECT column_name

我最近了解到,不使用PreparedStatements的.set()方法是一个非常严重的安全缺陷

在看了一些代码示例之后,我对PreparedStatements及其安全性提出了一些问题

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

例如,如果查询是

INSERT INTO table_name(?, ?);
 UPDATE table_name SET column_name=?;
SELECT column_name FROM table_name WHERE column2_name = ?;
(假设两个问号都是字符串)

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

另一个例子; 如果查询是

INSERT INTO table_name(?, ?);
 UPDATE table_name SET column_name=?;
SELECT column_name FROM table_name WHERE column2_name = ?;
一个人不能更改列名以使查询更改为不同的列吗

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

INSERT INTO table_name(?, ?);
 UPDATE table_name SET column_name=?;
SELECT column_name FROM table_name WHERE column2_name = ?;
攻击者是否可能修改列名称、表名称等,或向查询中插入其他操作


正如您可能知道的,我对安全性和MySQL知之甚少,所以如果这些问题非常明显,请原谅。谢谢大家!

如果使用得当,准备好的语句可以防止SQL注入。但是请记住,准备好的语句只能保护数据,但不能保护程序本身

看这里:

如果使用得当,准备好的语句可以防止SQL注入。但是请记住,准备好的语句只能保护数据,但不能保护程序本身

看这里:

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

  • 如果重复查询只在发送的数据上有所不同,则不需要重新分析查询本身;相反,只需要发送新数据

  • SQL注入攻击可能会导致不正确地转义直接包含在查询字符串中的数据,因为您的数据与查询字符串本身是分开的,并且是以安全的方式发送的,因此可以防止SQL注入攻击


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

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

  • 如果重复查询只在发送的数据上有所不同,则不需要重新分析查询本身;相反,只需要发送新数据

  • SQL注入攻击可能会导致不正确地转义直接包含在查询字符串中的数据,因为您的数据与查询字符串本身是分开的,并且是以安全的方式发送的,因此可以防止SQL注入攻击


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

    好的。因此,其要点是SQL注入攻击只能修改查询中发送的数据,而不能修改查询本身?而且MITM攻击实际上能够修改查询?(谢谢你的回复。顺便说一句)。成功的SQL注入攻击意味着你的数据是查询字符串本身的一部分,而漏洞在于查询会做一些你不想做的事情,而不仅仅是不正确的数据进入数据库。如果数据与查询分离,那么任何恶意输入都只是数据的一部分。如果攻击者能够读取和修改数据,MITM可能会影响应用程序通过攻击者的任何内容。(但请注意,只读MITM仍然可能是危险的。)好的。因此,其要点是SQL注入攻击只能修改查询中发送的数据,而不能修改查询本身?而且MITM攻击实际上能够修改查询?(谢谢你的回复。顺便说一句)。成功的SQL注入攻击意味着你的数据是查询字符串本身的一部分,而漏洞在于查询会做一些你不想做的事情,而不仅仅是不正确的数据进入数据库。如果数据与查询分离,那么任何恶意输入都只是数据的一部分。如果攻击者能够读取和修改数据,MITM可能会影响应用程序通过攻击者的任何内容。(但请注意,只读MITM仍然可能是危险的。)好的,这更清楚了一点,谢谢。好的,这更清楚了一点,谢谢。