在img src或链接中隐藏/转换敏感信息

时间:2016-05-03 17:21:28

标签: php jquery html

我正在使用XML API提供程序。他们正在为我提供某些图像来源。

<img src="http://api-provider.com/image/?key=YOUR_KEY&id=ID"/>

现在要获取任何图像,我必须提供我用于API的密钥。 所以有人可以简单地查看页面源并获取密钥。

有没有办法绕过这个并以某种方式隐藏密钥?

1 个答案:

答案 0 :(得分:2)

您可以创建一个php文件来加载图像并将API密钥放在您的php文件中,这样其他人就无法读取API密钥:

$API_Key = "Your_API_Key_Here";
$url = "http://api-provider.com/image/?key={$API_Key}&id={$_GET['id']}";
header('Content-type: image/jpeg');
readfile($url);

然后在您的Image src标记中添加您自己的链接:http://yourdomain.com/get_image.php?id= {$ Image_Id}

但它将使用您的服务器资源,因为将从您的服务器读取图像。此外,如果有人获得此URL,他可以在没有API密钥的情况下使用它,因此它与首先在URL中显示API密钥没有区别,也许您可​​以验证会话然后显示图像。

正如@ miken32指出的那样,为了确保用户不会直接使用您的服务器,您可以使用随机数乘以然后将base64_encode作为id。 像这样:

$Image_Src = "http://yourdomain.com/get_image.php?id=".base64_encode($Image_Id*18);

并在读取图像之前在PHP文件中首先通过反转上面的编码来验证id是否为有效数字。

$Image_Id = $_GET['id'];
$Image_Id = base64_decode($Image_Id);
if (is_numeric($Image_Id)){
   $Correct_Image_Id = $Image_Id / 18;
   if ($Correct_Image_Id > 0){
      //read image here
   }
}