PHP 安全风险 - 将图像传递到 GET 并输出作为结果


PHP Security Risks - Pass image into GET and output it as result

我目前面临一个问题,正在尝试探索以下场景中涉及的安全风险。

网站 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 函数)。其他人可以创建虚假链接并使用您的代码从其他人那里请求页面,或提供攻击或尝试分发恶意内容(例如,他们托管病毒,放置您网站的脚本来传递该病毒,您的网站名声不好)。

但是你可以通过以下方式缓解它(选择和选择,根据你的情况):

  1. 如果可能,请从路径中删除域名;如果您知道所有图像都来自该域,请将其删除并添加 PHP。这限制了人们滥用它,因为它仅限于您的域。

  2. 如果您有选择的域,请改为验证URL中的域是否符合您的期望 - 再次限制下载内容的自由统治。

  3. 如果您可以从图像 URL 中删除所有参数(如果您知道您永远不需要它们),那么还要删除参数。或者,如果可以匹配特定的参数模式,请去除所有其他参数。这有点限制了潜力。

  4. 入图像后验证它是否为图像。

  5. 跟踪来自特定 IP 地址的下载。如果它们超过预期金额,请停止交付更多。您需要知道预期金额是多少。

  6. 如果您同时提供 HTML 和图像下载,则只能将要公开的文件传送到该页面。基本上,如果您收到交付HTML页面的请求,那么您就知道随后还将请求哪些图像。根据请求 IP 和请求代理记录它们,并允许传递 60 分钟。如果您没有收到请求(即与 IP/代理不匹配),则不要交付。(注意:通常你不能依赖IP或Agent的东西,因为它们都可以伪造,但出于这些目的,这很好)。

  7. 通过饼干跟踪。与上述类似,但使用 cookie 来缩小浏览器范围,而不是通过 IP 和代理进行跟踪。

  8. 同样与上面类似,您可以为每个文件创建一个唯一的ID(例如"?path=avnd73q4nsdfyq347dfh"),并将要为该Unique_id unique_id提供的图像存储在数据库中

  9. 最后的措施是,永久更改脚本的名称 - 覆盖一点,然后停用旧脚本。

我希望这能让你知道你能做什么。选择尽你所能。

它可用于将攻击代理到另一个站点。