我刚刚读到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"="">
我刚刚读到PHP在一段时间内自己转义传入的GET和POST请求
这是魔术引号,它们总是无效的,更多的麻烦比他们值得。它们已被弃用,PHP的现代版本根本不支持它们。
应该转义字符串吗?
是的。您应该对不受信任的数据执行适当的处理(通过转义、白名单过滤或其他一些合适的方法),这适用于您放置数据的地方(这取决于您是否将其插入数据库查询(搜索SQL注入)、HTML文档(搜索XSS或跨站点脚本)或其他地方)。
正如你所注意到的,即使在HTML文档中,你也可以使用不同的选项——适合"元素内部"的选项并不总是适合"属性值内部"或"脚本元素内部"的选项。
这实际上取决于您使用响应的目的以及之后是否对它们进行了操作。
例如,如果您正在将数据插入到DB中,那么您应该转义您的数据以防止SQL注入。如果您只是显示数据,那么应该没有必要,除非您显示特定的字符。但是你也可以把它们换成HTML实体
在你给出的例子中,你应该转义它们,因为这就是SQL注入的工作方式
看情况。如果你检索或发送任何东西到数据库,那么是的,你应该转义字符,以避免mysql注入。但如果只是处理客户端(浏览器)方面的问题,那就没什么大不了的了