owasp ESAPI的encodeForSQL方法使用Codec DB2Codec来保护SQL注入

问题描述 投票:0回答:1

我正在尝试保护服务器代码免遭 SQL 注入。

为了做到这一点,我使用了 ESAPI.encoder().encodeForSQL 方法和 Codec DB2Codec,因为我的数据库是 DB2。

但是每当我在查询中给出单引号时,上述方法的输出都会添加额外的单引号,因此在尝试执行查询时使查询无效。

public static void main(String[] args) {

    String test = "UPDATE TEST_TABLE SET USER = 'temp' WHERE ID = 247";

    String testmod = ESAPI.encoder().encodeForSQL(new DB2Codec(), test);

    System.out.println(testmod);

}

代码的输出是

更新测试表设置用户=''临时''其中ID = 247

请找到图片

这是无效的 sql 语法。

任何解决问题的建议!!

java sql-injection owasp esapi
1个回答
0
投票

我认为需要转义的不是整个 sql 查询,而是您的输入。

public static void main(String[] args) {
    
    String sanitizedTemp = ESAPI.encoder().encodeForSQL(new DB2Codec(),     
   req.getParameter("temp")); String sanitizedId = 
     ESAPI.encoder().encodeForSQL(new DB2Codec(), req.getParameter("ID"));

    String test = "UPDATE TEST_TABLE SET USER = '"+ sanitizedTemp +"' WHERE ID 
    = "+sanitizedId;

    }

cf:在sql查询中转义用户输入

© www.soinside.com 2019 - 2024. All rights reserved.