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

时间:2012-06-04 10:26:13

标签: php curl

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

网站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可能以某种方式被利用存在任何安全风险?

由于

2 个答案:

答案 0 :(得分:1)

它可以用来代理攻击其他网站。

答案 1 :(得分:1)

是的 - 你打算滥用(假设你正在编写CURL函数)。其他人可能会创建虚假链接并使用您的代码来向其他人请求页面,或者发送攻击或尝试分发恶意内容(例如,他们托管病毒,将您网站的脚本用于传播该病毒,并且您的网站名称不好)。

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

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

  2. 如果您选择了某些域名,那么请确认该网址中的域名符合您的预期 - 再次,限制下载内容的免费统治。

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

  4. 将图片拉入后验证图片。

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

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

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

  8. 与上面类似,您可以为每个文件创建一个唯一的ID(例如“?path = avnd73q4nsdfyq347dfh”),并在数据库中存储您要为该unique_id传送的图像.Beople_id在a之后过期而

  9. 最终测量,通过peridically更改脚本的名称 - 覆盖一点,然后退出旧脚本。 。

  10. 我希望能够了解你能做些什么。选择你能做什么。