0

为了防止 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注入有什么帮助?请解释一下。

4

2 回答 2

2

使用 OWASP 的指南,可以在此处找到多个测试用例。

您在此处查看的代码片段可防止有人试图逃避查询以运行他们自己的任意命令。

if ( c.charValue() == '\'' )

如果输入值等于 ASCII 字符值0x27(单引号)

return "\'\'";

转义单引号。

Oracle 逃逸就在这里

假设您的查询是"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 将帮助您学习如何缓解它们。

于 2014-04-28T23:21:53.823 回答
1

这里很好地解释了 oracle 和其他 DBMS: https ://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet

但是规则 n。1 防止SQL注入不是使用查询连接而是使用prepared statements!使用准备好的语句,无需编码任何参数(由 sql api 设置),并且还有数据库性能优化。

于 2014-07-18T10:11:33.447 回答