我相信只允许 az 和 AZ 范围内的字符会消除任何 xss 攻击的可能性?我已经阅读了很多关于简单地将所有输出通过htmlspecialchars()
但似乎在某些情况下这不足以提供完整的保护。
另外,如果[a-zA-Z]+
是完全安全的,有没有什么方法可以完全安全地接受'
和-
字符以避免任何可能的 xss 攻击机会?(因为这些是除了 az 之外的名字中的两个主要字符)
这个问题有两个方面。
首先:是的,当然,如果没有办法“脱离上下文”,那么您将消除 XSS 和 SQL 注入漏洞的所有机会。如果只能使用字母字符,则无法插入 JS 或 SQL。
第二:这当然不是真正的保护,类似于不再驾驶汽车作为不发生事故的故障保险方法。有一天或另一天,您将在您的网站上输入需要插入其他字符的表单,而您将被搞砸。只写你的代码从根本上是安全的,从不信任客户端输入,并正确地转义你的代码生成的所有 HTML 最终是唯一安全的途径。
您要做的是解决输入端的输出问题,这不起作用。如果你有任意的用户输入,你最终会有人试图滥用它来做讨厌的事情。了解如何在输出端正确地对其进行转义,使用Twig之类的模板系统来处理大多数 XSS 问题的输出,并使用Doctrine之类的 DAL/ORM或 MySQLi 或 PDO 之类的良好参数化数据库访问 API 来避免 SQL 注入。