PHP:file_get_contents()上的这个白名单能防止注入攻击吗


PHP: Does this whitelist on file_get_contents() prevent injection attacks?

如果我有两个站点:

  • 存储我的图像的存储站点(myStorageSite.com/images/),

  • 主站点(mainSite.com)。

我希望用户提供一个文件名($file)来获取myStorageSite.com的images目录中的任何文件。(用户知道文件名)。

这个"白名单"代码是否允许用户从images目录中获取任何文件,但阻止他们在myStorageSite或mainSite上获取任何其他文件?

<?php
function dataURL($file, $mime){
  $white = 'http://myStorageSite.com/images/';
  $contents = file_get_contents($white . $file);
  $base64   = base64_encode($contents); 
  return ('data:' . $mime . ';base64,' . $base64);
}
?>

欢迎提出建议!

这不是白名单。白名单是将$file与允许的文件名的"列表"进行比较。要回答您的问题,不,您所做的操作允许他们获得存储服务器上的任何可用文件,请尝试将"../"作为$file传递。

白名单,如果实施得当,做你想做的事。

简单地说:不完全是

它将阻止人们访问mainSite.com上的数据,但它不会将人们限制在images文件夹中。有人可以做到这一点:

$file = '../whatever_folder_on_mystorage_site';

您所要做的就是准备使用file_get_contents访问的url。

由于您正在检索图像,您可以使用actually白名单某些扩展。只允许用户访问某些扩展名,如.jpg、.png等。。。