我目前面临一个问题,正在尝试探索以下场景中涉及的安全风险。
网站 A 具有以下代码:
<img src="http://www.websiteb.com/loadimage.php?path=http://www.websitea.com/images/logo.png" />
网站B:以下注释是加载图像中将发生的情况的示例.php(我不需要此页面的代码)
/* Use CURL to load image from $_GET['path'] and output it to page.
您是否认为网站 B 以某种方式被利用可能存在任何安全风险?
谢谢
为滥用敞开心扉(假设你正在编写 CURL 函数)。其他人可以创建虚假链接并使用您的代码从其他人那里请求页面,或提供攻击或尝试分发恶意内容(例如,他们托管病毒,放置您网站的脚本来传递该病毒,您的网站名声不好)。
但是你可以通过以下方式缓解它(选择和选择,根据你的情况):
如果可能,请从路径中删除域名;如果您知道所有图像都来自该域,请将其删除并添加 PHP。这限制了人们滥用它,因为它仅限于您的域。
如果您有选择的域,请改为验证URL中的域是否符合您的期望 - 再次限制下载内容的自由统治。
如果您可以从图像 URL 中删除所有参数(如果您知道您永远不需要它们),那么还要删除参数。或者,如果可以匹配特定的参数模式,请去除所有其他参数。这有点限制了潜力。
拉入图像后验证它是否为图像。
跟踪来自特定 IP 地址的下载。如果它们超过预期金额,请停止交付更多。您需要知道预期金额是多少。
如果您同时提供 HTML 和图像下载,则只能将要公开的文件传送到该页面。基本上,如果您收到交付HTML页面的请求,那么您就知道随后还将请求哪些图像。根据请求 IP 和请求代理记录它们,并允许传递 60 分钟。如果您没有收到请求(即与 IP/代理不匹配),则不要交付。(注意:通常你不能依赖IP或Agent的东西,因为它们都可以伪造,但出于这些目的,这很好)。
通过饼干跟踪。与上述类似,但使用 cookie 来缩小浏览器范围,而不是通过 IP 和代理进行跟踪。
同样与上面类似,您可以为每个文件创建一个唯一的ID(例如"?path=avnd73q4nsdfyq347dfh"),并将要为该Unique_id unique_id提供的图像存储在数据库中
。最后的措施是,永久更改脚本的名称 - 覆盖一点,然后停用旧脚本。
我希望这能让你知道你能做什么。选择尽你所能。
它可用于将攻击代理到另一个站点。