我收到了一个checkmarx HIGH漏洞问题SQL注入。
要求是用户可以在文本区域中插入任何SQL查询,点击提交此查询通过请求有效负载和服务器端使用请求体注释来传递穿过该层。
漏洞1: - 说这个请求没有消毒。
漏洞2: - 第二位是我使用Statement对象进行sql查询的executeUpdate,因为我不能使用PreparedStatement,没有可用的动态参数。在文本区域中的任何查询都是直接执行的。
我尝试过HtmlUtils.htmlEscape(sqlQuery)和StringEscapeUtils,但无法解决漏洞。
要求是这样的,只有我必须给用户提供文本区域以放置查询,以便服务器可以接受并直接执行它。
有什么建议吗?怎么解决!! 谢谢
答案 0 :(得分:1)
CW回答:
无法让用户安全地输入任意SQL。
Checkmarx警告这是一个安全漏洞。
更改应用程序的设计,使其不接受任意用户输入并将其作为代码执行(例如SQL查询)。这是注射攻击的定义。
答案 1 :(得分:0)
只有一种解决方案可以解决SQL注入:参数化您的查询!
请参见https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet