如果我从php中呼应数据,如何防止有害数据被注入img src?

问题描述 投票:0回答:1

我想这个问题的一点背景资料不会有什么影响:我有一个webservice,我可以上传图片,然后通过一个api调用通过id来检索。返回值是指向服务器上实际图片的链接。但是,如果请求被劫持,这个数据很容易被替代。

所以,由此产生的问题是,你可以将链接替换为 " onerror="alert(whatever); 并且它会用 "不管 "来提醒用户,因为这个链接被放到了 <img src="<?= api/get.php?image_id=x ?>" /> 成为 <img src="" onerror"alert(whatever);" />.

我如何去防止这种情况发生?有没有一种方法可以在插入图片标签前转义链接?或者更好的是将链接进行base64处理?

我已经尝试过使用以下方法,但都失败了。 1. urlencode() 2. base64_encode()

任何帮助都是感激的! 谢谢你的帮助

P.S. 我不能发送base64编码的图片,因为我需要能够轻松地复制图片的链接。

php security code-injection
1个回答
0
投票

当我在写这个问题的时候,SO推荐了一些相关的话题,在这里我发现 htmlspecialchars() 很好地解决了这个问题。然而,这可能还是不够的,因为这只对我的使用情况有效,而不是所有可能的情况。请随时提出更多的解决方案。


0
投票

听起来第一个问题是你允许用户控制文件名。如果你是控制和托管上传,生成一个guid并使用它来存储文件。去除用户控制文件名的功能,就会使他们没有机会在文件中添加一个 " 挣脱 <img src" 语境。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.