sql - Kohana 2.3.4 ORM sql注入(inject)保护

标签 sql mysql kohana sql-injection kohana-orm

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)从表单中收集数据。我没有更改任何与安全相关的 Controller 或库。

我还没有梳理源代码,但是Kohana是否将字符串转义然后删除斜杠,然后再将其输入到数据库字段中?我有点相信情况确实如此,但我想确定。

谢谢

最佳答案

当您转义 SQL 查询时,您是在转义文字数据,这样它就不会与 SQL 语法冲突,例如,这样撇号就不会被解释为字符串定界符。 MySQL 可以存储未转义的撇号和其他任何东西,而无需存储需要完整转义的数据。以转义形式存储数据只是为了在检索数据后必须再次取消转义,这是错误的。

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

关于sql - Kohana 2.3.4 ORM sql注入(inject)保护,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4442229/

相关文章:

sql - SQLite,使用分组?用于日期范围的子查询

php - Kohana 查询生成器更新

php - Laravel 没有获取我所有的输入值

mysql - 在 Heroku 上使用 Jaws Maria DB 的 Laravel 应用程序出现 MYSQL 错误

mysql - Group by 不提供准确的分组

Kohana - 将变量传递给 View

php - 优化基于Kohana的网站以提高速度和可扩展性

sql - 原子独占 SQL 记录更新

python - 如何将 Django 开发者服务器连接到 MySQL 数据库?

mysql - DML和DDL语句可以一起在一个事务中吗