为防止SQL注入,OWASP对收到的字符进行编码。下面是为org.owasp.esapi.codecs.OracleCodec.java类实现的代码
//Default implementation that should be overridden in specific codecs. Encodes ' to '' Encodes ' to '' (according to doc)
public String encodeCharacter( char[] immune, Character c ) {
if ( c.charValue() == '\'' )
return "\'\'";
return ""+c;
}
上述如何帮助防止SQL注入?请解释。
答案 0 :(得分:2)
使用OWASP的指南,可以找到多个测试用例here。
您在此处查看的代码片段可以防止有人试图逃离查询以运行自己的任意命令。
if ( c.charValue() == '\'' )
如果输入值等于ASCII char值0x27
(单引号)
return "\'\'";
逃避单引号。
Oracle转义是here。
假设您的查询为"select * from users where id = \'" + request.getParameter("id")
通过不转义单引号,输入如下:
request.setParameter("id", "\' OR 1=1;");
会导致返回该表中的所有信息,方法是将最终的非Java格式的查询更改为select * from users where id = '' OR 1=1;
我强烈建议您下载WebGoat计划,并按照其课程进行操作。它将教你如何使用SQL注入,以及许多其他基本的Web攻击。 ESAPI swingset将帮助您学习如何减轻它们。
答案 1 :(得分:1)
这里很好地解释了oracle和其他DBMS: https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet
但规则n。 1防止SQL注入不是使用查询连接而是编写语句!使用预处理语句,不需要编码任何参数(由sql api设置),并且还有DB性能优化。