1

我刚刚读到 PHP 会自行转义传入的 GET 和 POST 请求一段时间。双重转义没有好处。我应该完全摆脱字符串吗?

例如,我处理这样一个简单的输入:

$contact = mysqli_real_escape_string($dbLink, strip_tags($_POST['contact']));

后来,当保存并从数据库中检索时,我用最后一个值填充输入,例如:

echo '<input type="text" class="form-control" id="inputContact" name="contact" value="'.$contact.'">'.PHP_EOL;

当有人在字段中输入引号时,它会返回类似这样的内容,这会破坏表单:

<input type="text" class="form-control" id="inputContact" name="contact" value="0900 123 456, jozefmat" ejkasdfadsf"="">
4

3 回答 3

1

我刚刚读到 PHP 会自行转义传入的 GET 和 POST 请求一段时间

这是魔术语录,它们总是无效的,而且比它们值得的麻烦更多。它们已被弃用,现代版本的 PHP 根本不支持它们。

我应该完全摆脱字符串吗?

是的。您应该对不受信任的数据执行适当的清理(通过转义、白名单过滤或其他一些合适的方式),以适用于您放置数据的位置(这取决于您是否将其插入到数据库查询中(搜索用于SQL 注入)、HTML 文档(搜索XSS跨站脚本)或其他地方)。

正如您所注意到的,即使在 HTML 文档中,您可以使用的选项也各不相同 - 适合“在元素内部”的选项并不总是适合“在属性值内部”或“在脚本元素内部”。

于 2014-07-06T18:38:22.483 回答
0

这实际上取决于您使用响应的目的以及之后是否对其进行操作。

例如,如果您要将数据插入数据库,那么您应该转义您的数据以防止 SQL 注入。如果您只是显示数据,那么除非您显示特定字符​​,否则应该没有必要。但您也可以将它们交换为 HTML 实体

在您给出的示例中,您应该转义它们,因为这就是 SQL 注入的工作方式

于 2014-07-06T18:37:36.233 回答
-1

这取决于。如果您检索或发送任何内容到数据库,那么是的,您应该转义字符以避免 mysql 注入。但如果它只是处理客户端(浏览器)方面,那么这没什么大不了的

于 2014-07-06T19:28:58.113 回答