Php Todo列出了防止xss攻击的方法,哪种方法最有效?

Php Todo列出了防止xss攻击的方法,哪种方法最有效?,php,xss,Php,Xss,我想知道我们必须使用哪些最好的方法/技巧来防止和阻止xss攻击 我知道有: 使用htmlspecialchars() 使用消毒过滤器 使用strip_标记() 使用过滤器\输入\数组() 拒绝一切不需要的东西 读这个 需要完成数据库的用户有哪些方面? 新开发人员通常会犯什么样的错误 谢谢你第一条规则:永远不要相信用户的输入 你的建议很好,我想补充以下两点: addslashes() mysql\u real\u escape\u string()(假设您使用的是mysql,也有其他供应商

我想知道我们必须使用哪些最好的方法/技巧来防止和阻止xss攻击

我知道有:

  • 使用htmlspecialchars()
  • 使用消毒过滤器
  • 使用strip_标记()
  • 使用过滤器\输入\数组()
  • 拒绝一切不需要的东西
  • 读这个
需要完成数据库的用户有哪些方面? 新开发人员通常会犯什么样的错误


谢谢你

第一条规则:永远不要相信用户的输入

你的建议很好,我想补充以下两点:

  • addslashes()
  • mysql\u real\u escape\u string()(假设您使用的是mysql,也有其他供应商的函数)

我总是建议在处理用户输入之前对其进行过滤。以防以后忘记。

哪种方法最有效取决于您的需求。如果您需要允许用户使用一些HTML,您可能需要HTML净化器

但是,如果您永远不会接受来自用户的HTML,则需要应用上下文编码。您可以使用XSS,而无需用户注入新标记。攻击字符串可以改变现有标记。典型示例:

<input type="text" name="email" value="<?php echo $email; ?>">
onfocus事件处理程序中的javascript将启动

您需要使用的转义取决于上下文。我们使用的是javascript、HTML、HTML属性还是CSS?
有关如何编码的更多信息,请参阅。

我将使用以下方法:

$variable = trim(strip_tags(stripslashes($_POST['variablename'])));


这两种方法在HTML/PHP中都非常有效。

可能与感谢重复。这些函数不是mysql特有的?addslashes不是,但mysql\u real\u escape\u string是(但正如我提到的,其他DB供应商也有类似的函数,例如pg\u escape\u string、sqlite\u escape\u string和其他),哪种方法是正确的?只要你“在价值范围内”,我就可以使用原始$email或?htmlentities。
$variable = trim(strip_tags(stripslashes($_POST['variablename'])));
// Clean up the input values 
foreach($_POST as $key => $value) {  
    $_POST[$key] = stripslashes($_POST[$key]); 

    $_POST[$key] = htmlspecialchars(strip_tags($_POST[$key])); 
}