java这段代码SQL注入安全吗?
这是否会阻止SQL注入,还是必须用preparedStatement.setString()
传递参数
String sqlQuery = "select st from master where st_id= %1s ";
sqlQuery = String.format(sqlQuery, id);
preparedStatement = conn.prepareStatement(sqlQuery);
rs = preparedStatement.executeQuery();
这不是代码审查,上面的代码是问题的一个示例
# 1 楼答案
您直接在SQL代码中嵌入用户输入,如下所示:
有效地将用户输入作为代码运行。所以,不,这对SQL注入来说是不安全的。这是SQL注入的定义
不要直接将用户输入嵌入到SQL代码中,而是使用prepared statement中的参数将用户输入视为值,而不是代码。基本上,问题会变成这样:
然后使用语言中的工具将参数值添加到查询中:
旁注:有些人可能会指出,如果
id
是一种非字符串类型,那么这段代码仍然不会受到SQL注入的影响,因为没有人可以将任何危险的作为数字注入。虽然这在任何特定情况下都可能是偶然的,但这并不能保证,也不是安全的做法始终将用户输入视为值,而不是代码。无论输入的类型是什么,或者你对输入的来源有多确定。不要给攻击者任何攻击途径,即使你想不出他们可以利用它的任何方式