我刚刚读到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"="">
答案 0 :(得分:1)
我刚刚读到PHP在一段时间内自行转发传入的GET和POST请求
这是magic quotes,它们总是无效,而且它们值得更加麻烦。它们已被弃用,现代版本的PHP根本不支持它们。
我应该逃避弦乐吗?
是。您应该对不受信任的数据进行适当的清理(通过转义,白名单过滤或其他一些合适的方法),这适用于您放置数据的地方(根据您是否将数据插入数据库查询而不同(搜索)用于 SQL注入),HTML文档(搜索 XSS 或跨站点脚本)或其他地方。
正如您所注意到的,即使在HTML文档中,您可以使用的选项也各不相同 - 适用于“内部元素”的选项并不总是适用于“内部属性值”或“内部脚本元素”。
答案 1 :(得分:0)
这实际上取决于您使用响应的内容以及之后是否正在操作它们。
例如,如果要将数据插入数据库,则应该转义数据以防止SQL注入。如果您只是显示数据,那么除非您显示特定字符,否则应该没有必要。但您也可以将它们交换为HTML实体
在您给出的示例中,您应该转义它们,因为这是SQL注入的工作原理答案 2 :(得分:-1)
它取决于。如果你检索或发送任何东西到数据库然后是你应该转义字符以避免mysql注入。但如果它只是处理客户端(浏览器)方面那么它不会是一个大问题