代码之家  ›  专栏  ›  技术社区  ›  Ted Yu

用于OSWAP ESAPI的Sybase编解码器

  •  0
  • Ted Yu  · 技术社区  · 7 年前

    我使用sybase数据库。

    如果我想使用OWASP ESAPI来防止SQL注入

    我应该使用哪种编解码器?

    OracleCodec? MySQLCodec? DB2Codec? https://static.javadoc.io/org.owasp.esapi/esapi/2.0.1/org/owasp/esapi/codecs/package-summary.html

    非常感谢。

    1 回复  |  直到 7 年前
        1
  •  1
  •   avgvstvs    6 年前

    首先,不要使用ESAPI来阻止SQL注入。现有的所有SQL编码编解码器的设计意图都是为了在网站遭到黑客攻击的情况下提供一种应急措施,在重写所有查询以使用 Prepared Statements.

    Here's an excerpt of documentation for the OracleCodec :

    /**
     * Implementation of the Codec interface for Oracle strings. This function will only protect you from SQLi in the case of user data
     * bring placed within an Oracle quoted string such as:
     * 
     * select * from table where user_name='  USERDATA    ';
    

    忽略Sybase手册中的以下文字:

    不要准备只使用一次的语句

    使用准备好的语句或存储过程 全部的 数据库事务。在近十年的工程实践中,我从来没有看到过使用预先准备好的语句会导致实际性能下降。在大多数语言中,性能都会提高。Java就是这样。

    准备好的声明是这样的:

    [2019年编辑] 下面的代码在技术上可能是SQLi本身,当我写这篇文章时,我想指出 dbName 以这种方式使用参数是安全的 只有 当服务器对该值拥有绝对控制权时。 [/2019年]

    String updateString =
        "update " + dbName + ".COFFEES " +
        "set SALES = ? where COF_NAME = ?";
    updateSales = con.prepareStatement(updateString);
    

    Here are more.

    ESAPI目前没有提供Sybase编解码器,目前也没有开发Sybase编解码器的计划。

    资料来源:我目前是ESAPI的项目联合负责人。