Amazon s3 php 安全地删除对象



我允许我的用户删除他们上传的图像,但随后可以通过更改图像名称轻松删除属于其他用户的图像。

我在下面用于删除图像的工作代码...使用用户名前缀获取用户图像,例如 joe/some_image.jpg,用户使用复选框选择要删除的图像。

//images to be deleted
$images = array("joe/angry_robot.jpg", "joe/baby_with_mustache.jpg");
//create multidimensional array to use in class
foreach($images as $key => $value)
{
    $array[] = array(
        'key' => $value
    );
}
$this->load->library('awslib');
//initiate the class
$s3 = new AmazonS3();
$bucket = 'my_bucket';
$response = $s3->delete_objects ($bucket, array(
    'objects' => $array
));
// Success?
var_dump($response->isOK());

S3 中有哪些解决方案可用于安全删除存储桶中的对象?我正在寻找某种用户身份验证方法。

维护每个用户拥有的文件列表。

class User
{
  // yourproperties
  // array of owned images
  private $images;
  public function addImage($image)
  {
      $this->images[] = $image;
  }
  public function ownsImage($image)
  {
      return in_array($image, $this->images);
  }
  public function removeImage($image)
  {
      if( ( $key = array_search($image, $this->images) ) !== false ) { 
          unset($this->images[$key]);
          return true;
      }
      return false;
  }
}

然后。。。。
if( $user->ownsImage($imageToDelete) ) { // proceed } else { // not authorized }
以处理持久性的任何方式将该阵列映射到数据库。

或者在应用程序中以任何其他方式执行此操作。最终用户的授权不应由 S3 处理。

最新更新