如何在允许用户发布外部图像的同时防止XSS注入

Joh*_*eed 5 security xss csrf

一位用户最近向我报告说他们可以通过论坛利用他们可以使用的BBCode标签[img].

[img=http://url.to.external.file.ext][img]

当然,它会显示为损坏的图像,但浏览器会在那里检索文件.我自己测试了它,确定它是合法的.

我不知道如何防止这种类型的XSS注入,除了下载图像并通过PHP检查它是否是合法的图像.这很容易被一个疯狂的巨大文件滥用.

还有其他解决方案吗?

Jas*_*ich 2

您可以请求标头并检查文件是否实际上是图像。

编辑:

抱歉,我无法更深入地回答;我正在享受晚餐。

我有两种看法:

  1. 您在提交或查看帖子时检查提供的地址是否实际上是图像,您可以通过检查标题(确保它实际上是图像)或使用文件扩展名来完成此操作。这并不是万无一失的,并且存在一些明显的问题(动态更改图像等)。
  2. 确保您的网站安全,即使 [img] 标签遭到破坏,也不会出现真正的问题,例如:恶意代码无法使用窃取的 cookie。
  3. 使用请求外部图像并修改标头的脚本。

检查远程文件内容类型的基本方法:

$Headers = get_headers('http://url.to.external.file.ext');
if($Headers[8] == 'text/html') {
    echo 'Wrong content type.';
    exit;
}
Run Code Online (Sandbox Code Playgroud)