避免在动态内容<img>上使用htmlspecialchars(),同时避免XSS攻击


Avoiding the use of htmlspecialchars() on <img> on dynamic contents, while avoiding XSS attacks

我需要你的帮助来解决一个非常简单的问题。我网站上某些页面的文章内容存储在MySQL数据库中,我在输出到浏览器时对其应用了htmlspecialchars((,但实际上有合法的<img src="images/me.jpg">,它们被呈现为纯文本,同时它们应该是文章内容的有效图像的一部分。

如何成功显示图像,同时避免可能的XSS攻击等。

谢谢

根据 HTML

标准解析 HTML,并丢弃任何您不想保留的元素/属性/属性值。检查每个 img 元素的src值以查看它是否是有效的 URL,如果是,请检查它是否确实存在并且是有效的图像。如果没有,请丢弃该元素。

如果您使用专有格式语言(例如BBCode或Markdown(,您仍应针对为每个img元素提供的值执行检查(许多解析BBCode,Markdown等的库将为您执行这些检查(。

常见的方法是不要使用HTML,而是使用您自己的格式化语言,如bbcode或Markdown。这样,您可以轻松地将该格式转换为 HTML,同时避免让用户输入他们想要的任何 HTML。

使用 HTMLPurifier - 它将删除任何脚本,包括放置在标签属性中的 javascript,同时保留(并且格式良好(HTML 代码