在我实施了消毒功能(根据要求的细节)之后,我的老板决定更改接受的输入。现在,他想保留一些特定的标签及其属性。我建议实施一种类似于BBCode的语言,这是更安全的恕我直言,但他不想这样做,因为这会做很多工作。

这次我想简单地保持简单,所以下次他要我再次改变这件事时,我不会杀死他。我知道他会的。

首先使用 strip_tags 使用标签参数保存,然后 htmlentities?

有帮助吗?

解决方案

strip_tags 不一定会导致安全内容。 strip_tags 其次是 htmlentities 将是安全的,因为HTML编码的任何内容都是安全的,但这没有任何意义。

用户要么要输入纯文本,在这种情况下,应使用 htmlspecialchars (优先 htmlentities),或者他们正在输入html标记,在这种情况下,您需要正确解析它,修复损坏的标记并删除不在安全白名单中的元素/属性。

如果这是您想要的,请使用现有库来执行此操作(例如。 htmlpurifier)。因为这不是一项琐碎的任务,如果您弄错了,您就给了自己XSS安全孔。

其他提示

您可以使用特定标签使用 strip_tags 使用此语法: strip_tags($text, '<p><a>');

该片段将剥离所有标签 pa. 。保留属性的标签(您允许的标签)(pa 在上面的示例中)。

但是,这并不意味着属性是安全的。他是否想要特定的属性,还是要将所有属性保留在允许的标签上?对于第一种情况,您需要解析每个标签并删除所需的标签,以消毒值。要将所有属性保留在允许的标签上,您仍然需要对其进行消毒。我建议跑步 htmlentities 关于对它们进行消毒的属性值(我认为为显示)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top