gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-10-31 22:13:17 24 4
gpt4 key购买 nike

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

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

最佳答案

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

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

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

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

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

关于php - PHP 的 FILTER_VALIDATE_EMAIL 是否提供足够的安全性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10433387/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com