我正在使用HP Fortify来测量我的java代码的代码质量。
HP Fortify在
上报告 SQL注入错误show
那么如何解决这个问题呢?
答案 0 :(得分:1)
如果您不使用用户输入作为预准备语句的参数,而是通过将字符串连接在一起来构建SQL命令,那么即使使用预准备语句,您仍然容易受到SQL注入攻击
答案 1 :(得分:1)
根据我的经验,如果HP Fortify无法跟踪您用于将queryString构建为常量的所有字符串的来源,HP Fortify将报告此错误。如果从磁盘读取字符串的任何部分或作为请求参数传递,那么您将面临易受SQL注入攻击的风险。
建议的解决方案是在构建SQL查询字符串时永远不要使用外部字符串。您的SQL字符串只能从String常量构建,并且在运行时插入的每个参数都应该作为绑定变量插入,这意味着它的位置应该显示为"?"在SQL字符串中,应使用PreparedStatement类的setX()方法设置其值。
请注意,在Java中创建PreparedStatements时应始终使用绑定变量:它不仅是一种良好的安全实践,而且是一种良好的性能实践,因为它不需要数据库重新解析SQL每次参数值改变时查询。