1

我在每次提交时过滤来自用户的输入,或者我有创建函数来操作 get/post 值并在每次提交表单时调用它。

但是现在我将以下功能保留在主要包含文件中:

foreach ($_POST as $key => $value) {
    $_POST[$key] = mysql_real_escape_string(trim($value));
}

foreach ($_GET as $key => $value) {
    $_GET[$key] = mysql_real_escape_string(trim($value));
}

它运作良好,但是对于每一个帖子/获取都这样做有什么缺点吗?PS 好吧,除了脚本的性能。

4

3 回答 3

0

mysql_real_escape_string不能完全防止 SQL 注入。让我们看看下面的例子:

$input = mysql_real_escape_string($_POST['id']);
$query = "DELETE FROM user WHERE id={$input};";

可以说$_POST['id']等于1 OR TRUE

于 2012-04-16T07:19:56.100 回答
0
  1. 验证用户输入而不是先转义,在验证之后和插入数据库之前,你可以转义。
  2. 回答您的问题:以正确的方式执行此操作是使用函数并将这些函数放在单独的文件中,并在调用函数之前包含该文件。您的最简单的方式也可以,但如果表单及其字段的数量很大那么脚本会很混乱,并且其他开发人员很难维护,因此使用第二种方法来使用包含过滤功能的文件在任何情况下都是一个好主意......
于 2012-04-16T07:10:11.623 回答
0

这不是解决这个问题的合乎逻辑的方法。如前所述,这不会处理多维数组,如果您突然可能需要使用原始值,这将是一件麻烦事。例如,有人可能想要保存一个 textarea 字段,并希望底部有几行以便以后继续工作。这些行将在保存后消失。
表单验证也可能会有点混乱。

您的解决方案也不是 100% 安全的方法。您仍然可以抵抗XXS

除此之外,我不知道没有自动执行此操作的框架,而且他们可能没有这样做是有原因的。

于 2012-04-16T07:11:18.330 回答