清理数据 PHP - 我是否需要转义 if 语句中的用户输入?

Sanitizing data PHP - do i need to escape user inputs that are inside if statements?

我正在清理页面上输出的所有用户输入,例如:

echo escape($user_input);

我对未输出到页面但在语句内部的用户输入有疑问 - 它们需要转义吗?

这样可以吗:

if ($user_input == 'something') { echo escape($another_user_input); }

或者应该是:

if (escape($user_input) == 'something') { echo escape($another_user_input); }

其他逻辑(foreach 循环等)的相同问题会比这个简单的例子增加更多的麻烦。

您需要转义某些内容的唯一原因是当您将数据插入另一个文本媒体时,该媒体会根据某些规则重新解释。

例如:

echo '<p>' . $somedata . '</p>';

这是以编程方式生成 HTML,它将被 HTML 解析器解释,并将根据 $somedata.

中的内容具有特定的行为
$query = 'SELECT foo FROM bar WHERE baz = ' . $somedata;

这将以编程方式生成一个 SQL 查询,该查询将由 SQL 解析器解释,并将根据 $somedata.

中的内容具有特定的行为

如果您想确保 HTML 或该查询按照您的预期运行,您最好确保以一种不允许任何人注入不需要的命令的方式生成这些文本命令。

if ($somedata == 'something')

这里您不是在创建一些将被某些东西解释的新文本。任何人都无法在这里注入任何东西。 PHP 并不是用 $somedata 的内容替换 $somedata,然后用内插数据重新解释该行。所以没有必要以任何方式逃避它。

另见 The Great Escapism (Or: What You Need To Know To Work With Text Within Text)