在PHP站点中避免xss攻击的最佳实践是什么 [已关闭]

2022-08-30 09:01:50

我配置了PHP,以便魔术报价打开并且注册全局关闭。

我尽我所能总是调用htmlentities()来表示我输出的从用户输入派生的任何内容。

我也偶尔会搜索我的数据库,以获取xss中使用的常见内容,例如...

<script

我还应该做什么,我怎么能确保我试图做的事情总是完成的。


答案 1

转义输入并不是成功进行 XSS 预防的最佳方法。此外,输出也必须转义。如果您使用Smarty模板引擎,则可以使用修饰符将所有敏感字符转换为HTML实体(我使用自己的修饰符,这是上述的别名)。|escape:'htmlall'|e

我的输入/输出安全方法是:

  • 存储未修改的用户输入(输入时没有 HTML 转义,只有通过 PDO 预准备语句完成的数据库感知转义)
  • 输出转义,具体取决于您使用的输出格式(例如.HTML和JSON需要不同的转义规则)

答案 2

我认为,在输入过程中不应该逃避任何东西,而应该在输出时逃脱任何东西。由于(大多数时候)您不能假设您知道该数据的去向。例如,如果您的表单包含稍后出现在您发送的电子邮件中的数据,则需要不同的转义(否则恶意用户可能会重写您的电子邮件标头)。

换句话说,您只能在数据“离开”应用程序的最后一刻进行转义:

  • 列表项
  • 写入 XML 文件,转义为 XML
  • 写入 DB,转义(针对该特定 DBMS)
  • 写电子邮件,转义电子邮件

做空:

  1. 您不知道数据的发展方向
  2. 数据实际上可能最终位于多个位置,需要不同的转义机制,但不是两者兼而有之
  3. 为错误目标转义的数据确实不好。(例如,收到一封主题为“去汤米酒吧”的电子邮件。

如果您在输入层转义数据(或者您需要再次对数据进行转义等),则会出现 Esp #3。

PS:我会建议不要使用magic_quotes,这些都是纯粹的邪恶!


推荐