0

我使用 PHP 并使用名为Idiorm的 ORM 进行 SQL 调用。

请求可能如下所示:

$person = ORM::for_table('person')->create();
$person->name = $_POST['name'];
$person->age = $_POST['age'];
$person->save();

它工作得很好,但它可能对 SQL 注入不安全?解决此问题的正确/最佳方法是什么?例子?

4

2 回答 2

7

从他们的自述文件中

特征

  • 建立在 PDO 之上。
  • 在整个过程中使用准备好的语句来防止 SQL 注入攻击。

但是,对于它说的表名

请注意,此方法 *不会转义其查询参数,因此不应直接从用户输入传递表名。*

限制、排序和分组也是如此,因此对于那些您需要考虑替代方法的人(例如,仅让 ascii-7 字符通过)。如果你需要这样做,限制只是整数,所以你可以做ctype_digit检查。对于排序和分组,您可以检查字母数字,假设您的列名中没有其他任何内容。这可以用ctype_alnum来完成。

但是你在那里的查询应该没问题,因为它没有那些。

当然,你不应该只是相信它——测试它。

于 2012-12-07T07:01:27.160 回答
3

我在这里查看了源代码

第 1284 行(save() 方法的一部分),它似乎正在准备语句。

所以在我看来,假设它已经在处理 sql 注入看起来是安全的。

于 2012-12-07T07:00:51.747 回答