0

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

网站 A 的代码如下:

<img src="http://www.websiteb.com/loadimage.php?path=http://www.websitea.com/images/logo.png" />

网站 B:以下注释是 loadimage.php 中将发生的情况的示例(我不需要此页面的代码)

/* Use CURL to load image from $_GET['path'] and output it to page.

您是否认为网站 B 以某种方式被利用会带来任何安全风险?

谢谢

4

2 回答 2

1

它可用于代理对另一个站点的攻击。

于 2012-06-04T11:24:22.123 回答
1

是的 - 你正在为滥用而敞开心扉(假设你正在编写 CURL 函数)。其他人可以创建虚假链接并使用您的代码向其他人请求页面,或进行攻击或尝试分发恶意内容(例如,他们携带病毒,将您网站的脚本用于传播该病毒,而您的网站获得了坏名声)。

但是您可以通过以下方式缓解它(根据您的情况进行选择):

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

  2. 如果您有选择的域,那么请验证 URL 中的域是否与您期望的匹配 - 再次限制下载内容的自由支配。

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

  4. 将其拉入后验证它是图像。

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

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

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

  8. 同样与上面类似,您可以为每个文件创建一个唯一的 id(例如“?path=avnd73q4nsdfyq347dfh”,然后将您将为该unique_id 提供的图像存储在数据库中。Unique_id 会在一段时间后过期。

  9. 最后的措施,定期更改脚本的名称 - 覆盖一下,然后淘汰旧脚本。.

我希望这可以让您了解您可以做什么。尽量选择。

于 2012-06-04T11:24:51.843 回答