我正在尝试保护服务器代码免遭 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 语法。
任何解决问题的建议!!
我认为需要转义的不是整个 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;
}