我有一个页面,我想接受GET参数中的电子邮件地址。如果我使用 FILTER_VALIDATE_EMAIL
,我还容易受到xss和javascript注入攻击等等吗?
我不是在问这是一个好的,还是足够好的电子邮件地址验证器。我想知道是否仍然可以通过传递给它的任意字符串注入错误的Web代码 - 我是否需要进行额外的过滤以防止这种情况发生?
我有一个页面,我想接受GET参数中的电子邮件地址。如果我使用 FILTER_VALIDATE_EMAIL
,我还容易受到xss和javascript注入攻击等等吗?
我不是在问这是一个好的,还是足够好的电子邮件地址验证器。我想知道是否仍然可以通过传递给它的任意字符串注入错误的Web代码 - 我是否需要进行额外的过滤以防止这种情况发生?
是的,有效的电子邮件地址可以用作一些精心设计的字符串的容器。
摆脱“过滤”的心态,进入“逃避”的心态。通用的“安全”过滤器根本不存在。
例如,如果电子邮件地址将输出到纯文本文档,则不需要执行任何操作。如果将其作为文本节点输出到html文档中,则需要对html特殊字符和权限进行转义。如果它被放入一个html文档中,并且它的值将在html属性中,那么需要非常小心地执行转义,这将取决于上下文。如果它在sql查询中使用,则需要通过数据库特定的转义函数进行转义。等等。
它是关于使用的上下文,而不是字符串的内容。这适用于所有事情(不仅仅是电子邮件或其他用户输入),它不仅仅是安全问题,而是编程正确性的问题。
fyi,我记得允许引用字符串的电子邮件地址规范,所以类似于 "<script>alert('xss')</script>"@example.com
是有效的。可能性是显而易见的。
是的,有效的电子邮件地址可以用作一些精心设计的字符串的容器。
摆脱“过滤”的心态,进入“逃避”的心态。通用的“安全”过滤器根本不存在。
例如,如果电子邮件地址将输出到纯文本文档,则不需要执行任何操作。如果将其作为文本节点输出到html文档中,则需要对html特殊字符和权限进行转义。如果它被放入一个html文档中,并且它的值将在html属性中,那么需要非常小心地执行转义,这将取决于上下文。如果它在sql查询中使用,则需要通过数据库特定的转义函数进行转义。等等。
它是关于使用的上下文,而不是字符串的内容。这适用于所有事情(不仅仅是电子邮件或其他用户输入),它不仅仅是安全问题,而是编程正确性的问题。
fyi,我记得允许引用字符串的电子邮件地址规范,所以类似于 "<script>alert('xss')</script>"@example.com
是有效的。可能性是显而易见的。
这应该是足够好的,但当你将它输入数据库等时,你自然应该逃避它。你永远不知道PHP或Apache等中可能存在哪种类型的错误,这可能允许攻击无论如何发生。