1

Kohana 提到他们使用 mysql_real_escape_string 来清理文档中的数据库输入。但是,在通过表单品尝一些基本查询时,它们被输入到数据库中,与我输入的完全一样。例如:

SELECT * FROM users WHERE username='admin' AND password='' OR ''=''

完全按照它的显示输入到该 mysql 数据中。我期待看到:

SELECT * FROM users WHERE username=\'admin\' AND password=\'\' OR \'\'=\'\' 

我使用的是 ORM 库而不是数据库,但我知道它们可以一起工作。另外,我正在使用内置的输入库 ($this->input-post) 从表单中收集数据。我没有更改任何与安全相关的控制器或库。

我还没有梳理源代码,但是 Kohana 是否对字符串进行了转义,然后在将其输入到 db 字段之前删除了斜杠?我有点相信情况确实如此,但我想确定一下。

谢谢

4

2 回答 2

3

当您转义 SQL 查询时,您正在转义文字数据,以便它不会与 SQL 语法冲突,例如,撇号不会被解释为字符串分隔符。MySQL 可以存储未转义的撇号和其他任何内容,而无需存储数据需要巧妙地转义。以转义形式存储数据是错误的,这样您就必须在检索后再次对其进行转义。

虽然我不熟悉 Kohana,但您可以放心,如果您要求它存储查询,它会正确处理您的输入,并且它会返回完全相同的查询。

于 2010-12-14T17:52:18.823 回答
1

Kohana ORM 自动保护您免受 SQL 注入。

于 2010-12-14T17:51:02.753 回答