我使用 PHP 并使用名为Idiorm的 ORM 进行 SQL 调用。
请求可能如下所示:
$person = ORM::for_table('person')->create();
$person->name = $_POST['name'];
$person->age = $_POST['age'];
$person->save();
它工作得很好,但它可能对 SQL 注入不安全?解决此问题的正确/最佳方法是什么?例子?
从他们的自述文件中:
特征
- 建立在 PDO 之上。
- 在整个过程中使用准备好的语句来防止 SQL 注入攻击。
但是,对于它说的表名
请注意,此方法 *不会转义其查询参数,因此不应直接从用户输入传递表名。*
限制、排序和分组也是如此,因此对于那些您需要考虑替代方法的人(例如,仅让 ascii-7 字符通过)。如果你需要这样做,限制只是整数,所以你可以做ctype_digit检查。对于排序和分组,您可以检查字母数字,假设您的列名中没有其他任何内容。这可以用ctype_alnum来完成。
但是你在那里的查询应该没问题,因为它没有那些。
当然,你不应该只是相信它——测试它。