php - 在 PHP 中过滤掉 MySQL 查询

标签 php mysql filter

嘿,我正在对涉及一些用户输入的 MySQL 数据库进行一些查询。我想知道如何防止注入(inject)攻击,例如,如果有人输入

"; a-MySQL query here;"

它将被执行,这将允许人们访问危害我的系统。我想知道如何防止这样的事情,可能创建一个函数来过滤掉寻找不良语句的查询?或者也许不允许;特点?

总结一下:

  • 现在防止注入(inject)攻击的常见做法是什么?
  • 我该怎么办?
  • 对于那些知道自己通过更改我的数据库所做的事情的人来说,此解决方案的效果如何。

最佳答案

唯一的方法是正确转义用户提交的数据。其他人指出了一些这样做的方法。

还有另一种方法:准备好的语句和占位符。每个现代 PHP 数据库接口(interface)都支持准备好的语句,包括 mysqliPDO .

让我们使用 PDO 作为演示。假设我们想要更新用户提交的表 foo 中的一些数据。

$sql = 'UPDATE foo SET bar = ? WHERE user_id = ?';
$sh = $db->prepare($sql);
$sh->execute(array( $_POST['bar'], $_SESSION['user_id'] ));

传递给execute的数组中的变量替换查询中的问号占位符。发生这种情况时,它们会自动转义并被引用。您不需要手动转义它们以使它们安全地放入数据库!

另一方面,您仍然需要过滤它们以查找意外内容,例如 HTML、Javascript、您期望数字的字母等。让数据安全地插入数据库是 only half of the battle .

关于php - 在 PHP 中过滤掉 MySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3340533/

相关文章:

mysql - MySQL 中的 case 函数

c - C 中的 FIR 低通滤波器

mysql - 系统健康状况»进程管理器

MySQL复式记账系统数据库设计?

c# - 如何在 Visual Studio 2010 中调试过滤器程序?

css - CSS3滤镜灰度和饱和有什么区别?

php - 如何在不使用 php artisan 的情况下有效地创建 Controller 或模型?

session - 将 php.ini 的 session.auto_start 设置为 1 是否被认为是不好的做法?

php - 通过 HTTP 复制 MySQL 数据库

php - 用于 php 文件的 Composer PSR-4