Php xss攻击-正则表达式或htmlspecialchars

Php xss攻击-正则表达式或htmlspecialchars,php,security,xss,Php,Security,Xss,为了防止xss攻击,如果我使用php正则表达式阻止像'>或这样的奇怪字符我是否仍然需要使用htmlspecialchars和htmlentities?或者建议使用手工制作的正则表达式作为XSS攻击的防护。但是,您必须考虑上下文。例如,将保护标记内的动态内容,但不保护标记或事件处理程序(如onclick)内的动态内容。在html注释中,编码不提供任何保护。编写不易受到XSS攻击的代码的关键是理解所有不同的攻击向量 有关XSS预防的完整详细信息,我建议使用。或通过手工制作的正则表达式作为防止XSS攻

为了防止xss攻击,如果我使用php正则表达式阻止像
'>
这样的奇怪字符
我是否仍然需要使用
htmlspecialchars
htmlentities

或者建议使用手工制作的正则表达式作为XSS攻击的防护。但是,您必须考虑上下文。例如,将保护
标记内的动态内容,但不保护
标记或事件处理程序(如
onclick
)内的动态内容。在html注释中,编码不提供任何保护。编写不易受到XSS攻击的代码的关键是理解所有不同的攻击向量

有关XSS预防的完整详细信息,我建议使用。

或通过手工制作的正则表达式作为防止XSS攻击的保护。但是,您必须考虑上下文。例如,将保护
标记内的动态内容,但不保护
标记或事件处理程序(如
onclick
)内的动态内容。在html注释中,编码不提供任何保护。编写不易受到XSS攻击的代码的关键是理解所有不同的攻击向量

有关XSS预防的完整详细信息,我建议使用。

还可以尝试使用:

还可以尝试使用:


PDO在保护查询免受XSS攻击方面做得非常有效。无需担心您是否记得保护您的查询,因为它是自动的。其他几个框架也支持此功能

如果因为客户机需求或类似的原因而不使用PDO,我至少会在连接类中构建一个自动的htmlspecialchars函数,这样我就不会忘记这样做(尽管这是我最不喜欢的选项)


作为一个UI人员,我总是从前端开始攻击我的安全问题。适当且设计良好的前端验证可以在一开始就阻止意外问题进入查询,而且它们是向用户报告问题的最有效的UI模式。阻止诸如
PDO之类的元素可以非常有效地保护查询免受XSS攻击。无需担心您是否记得保护您的查询,因为它是自动的。其他几个框架也支持此功能

如果因为客户机需求或类似的原因而不使用PDO,我至少会在连接类中构建一个自动的htmlspecialchars函数,这样我就不会忘记这样做(尽管这是我最不喜欢的选项)


作为一个UI人员,我总是从前端开始攻击我的安全问题。适当且设计良好的前端验证可以在一开始就阻止意外问题进入查询,而且它们是向用户报告问题的最有效的UI模式。阻止元素,例如
不要使用htmlentities(),因为它将创建所有浏览器都无法识别的HTML实体。您只需使用htmlspecialchars(),然后确保头和元标记中的编码设置正确。只要您正确定义编码,浏览器就能很好地工作。@Yzmir Ramirez:您能提供一个由
htmlentities()生成的HTML实体的示例吗
和不识别它的浏览器?@Yzmir Ramirez:BTW:两者都接受可选的
$charset
参数。但是好的正则表达式和您建议的有什么区别?为什么htmlspecialchars()和htmlentities()是最好的选择?@Wire Creation:为什么要编写自己的基于正则表达式的解决方案,而这种解决方案可能会出错,因为该语言包含内置的优化函数,可以工作?不要使用htmlentities(),因为它将创建所有浏览器都无法识别的HTML实体。您只需使用htmlspecialchars(),然后确保头和元标记中的编码设置正确。只要您正确定义编码,浏览器就能很好地工作。@Yzmir Ramirez:您能提供一个由
htmlentities()生成的HTML实体的示例吗
和不识别它的浏览器?@Yzmir Ramirez:BTW:两者都接受可选的
$charset
参数。但是好的正则表达式和您建议的有什么区别?为什么htmlspecialchars()和htmlentities()是最佳选择?@Wire Creation:为什么要编写自己的基于正则表达式的解决方案,这可能会让你搞砸,当语言包含运行的内置优化函数时?这与OP的要求相反。这与OP的要求相反。-1 PDO对XSS没有任何保护作用。它可以防止SQL注入,但不能防止XSS。它可以防止SQL注入,但不能防止XSS。