我应该在我的GET和POST请求中转义字符吗?

时间:2014-07-06 18:34:09

标签: php post get addslashes

我刚刚读到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"="">

3 个答案:

答案 0 :(得分:1)

  

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

这是magic quotes,它们总是无效,而且它们值得更加麻烦。它们已被弃用,现代版本的PHP根本不支持它们。

  

我应该逃避弦乐吗?

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

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

答案 1 :(得分:0)

这实际上取决于您使用响应的内容以及之后是否正在操作它们。

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

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

答案 2 :(得分:-1)

它取决于。如果你检索或发送任何东西到数据库然后是你应该转义字符以避免mysql注入。但如果它只是处理客户端(浏览器)方面那么它不会是一个大问题