如果我从 PHP 回显数据,如何防止有害数据注入 IMG SRC ?



我认为这个问题的一点背景不会有什么坏处:
我有一个网络服务,我可以将图像上传到它,然后通过 api 调用通过 id 检索它们。返回值是指向服务器上实际图像的链接。但是,如果请求被劫持,则很容易替换该数据。

因此,由此产生的问题是,您可以将链接替换为" onerror="alert(whatever);并且它会用"whatever"提醒用户,因为此链接被放置在<img src="<?= api/get.php?image_id=x ?>" />变得<img src="" onerror"alert(whatever);" />

我该如何防止这种情况发生?有没有办法在将链接插入图像标签之前对其进行转义?或者更好的是 base64 链接?

我尝试过使用以下方法失败:
1. urlencode(( 2. base64_encode((

任何帮助不胜感激!谢谢!

附言我无法发送 base64 编码的图像,因为我需要能够轻松复制图像的链接。

当我写这个问题时,SO提出了一些相关主题,我发现htmlspecialchars()可以很好地解决这个问题。但是,这可能仍然不够,因为这仅适用于我的用例,而不是每个可能的用例。请随时提出更多解决方案。

听起来第一个问题是你允许用户控制文件名。如果要控制和托管上传,请生成 guid 并使用它来存储文件。删除用户控制文件名的功能会消除他们可以添加"以突破<img src"上下文的机会。

我不明白为什么urlencode()会失败。只要"显示为%22,就可以防止该数据脱离属性上下文。

您还需要确保<>字符也已编码。为此,您可能需要使用htmlentities()

相关内容

  • 没有找到相关文章

最新更新