繁体   English   中英

PHP 的 FILTER_VALIDATE_EMAIL 是否提供足够的安全性?

[英]Does PHP's FILTER_VALIDATE_EMAIL provide adequate security?

我有一个页面,我想在其中接受 GET 参数中的电子邮件地址。 如果我使用FILTER_VALIDATE_EMAIL ,我是否仍然容易受到 xss 和 javascript 注入攻击等攻击?

我不是在问它是否是一个好的或足够好的电子邮件地址验证器。 我想知道是否仍然可以通过通过它的任意字符串注入错误的 Web 代码——我是否需要进行额外的过滤来防止这种情况发生?

是的,一个有效的电子邮件地址可以很容易地用作一些精心制作的字符串的容器,这些字符串可用于攻击您。

摆脱“过滤”的心态,进入“逃避”的心态。 一个通用的“使其安全”过滤器根本不存在。 它不可能存在,因为所有转义都必须以特定于上下文的方式完成。

例如,如果将电子邮件地址输出到纯文本文档,则无需执行任何操作。 如果它被输出到一个 html 文档中,作为一个文本节点,那么它需要为 html 上下文进行转义,因此转义 html 特殊字符和实体。 如果它被放入一个 html 文档,并且它的值将在一个 html 属性内,那么需要非常非常小心地进行转义,这取决于哪个html 属性。 如果在 sql 查询中使用它,则需要通过特定于数据库的转义函数对其进行转义,即使将其用作参数值(即where someColumn = '$paramVal' ),也必须以不同的方式转义, vs 符号名称,如表名、列名(即order by $myEscapedColumnName DESC )。 等等。

这完全是关于使用上下文,而不是字符串的内容。 这适用于一切(不仅仅是电子邮件或其他用户输入),这不仅是安全问题,也是编程和语法正确性的问题。 正确的转义很复杂,需要花费大量时间来学习,并且在编码时需要仔细思考和考虑。 许多程序员因为努力而懒得去做,他们是导致公司被黑客入侵的人。

仅供参考,电子邮件地址规范允许引用字符串,因此您可以注入诸如"<script>alert('xss')</script>"@example.com字符串。 可能性是显而易见的。

这应该已经足够好了,但自然地,在将它输入到数据库等时,您仍然应该逃脱它。您永远不知道 PHP 或 Apache 等中可能存在什么样的错误,无论如何都可能允许攻击发生。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM