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