gpt4 book ai didi

java - 这段代码SQL注入(inject)安全吗?

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

这会阻止 SQL 注入(inject)还是我必须使用 preparedStatement.setString() 传递参数

String sqlQuery = "select st from master where st_id= %1s ";

sqlQuery = String.format(sqlQuery, id);
preparedStatement = conn.prepareStatement(sqlQuery);
rs = preparedStatement.executeQuery();

这不是代码审查,上面的代码是问题的示例。

最佳答案

您在这里直接将用户输入嵌入到 SQL 代码中:

String.format(sqlQuery, id)

有效地运行用户输入作为代码。所以,不,这对 SQL 注入(inject)来说不安全。这是SQL注入(inject)的定义。

不是直接将用户输入嵌入到 SQL 代码中,而是在 prepared statement 中使用参数将用户输入视为 而不是代码。本质上查询将变成这样:

String sqlQuery = "select st from master where st_id= ? ";

然后您将使用语言中的工具将参数值添加到查询中:

preparedStatement = conn.prepareStatement(sqlQuery);
preparedStatement.setInt(1, id); // <--- here
rs = preparedStatement.executeQuery();

旁注:有些人可能会指出,如果 id 是非字符串类型,那么这段代码仍然可以免受 SQL 注入(inject)攻击,因为没有人可以注入(inject)任何危险例如作为一个数字。虽然对于任何给定的实例,这可能间接地是正确的,但不能保证并且仍然不是安全的做法。

始终将用户输入视为值,而不是代码。无论该输入的类型如何,或者您对该输入的来源有多确定。不要给攻击者任何攻击途径,即使您想不出他们可以利用它的任何方式。

关于java - 这段代码SQL注入(inject)安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35133355/

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