亚马逊s3 php安全删除对象

时间:2012-09-18 02:55:23

标签: php api class file-upload amazon-s3

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

我在下面的工作代码用于删除图像...使用用户名前缀获取用户图像,例如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中有哪些解决方案可以安全地删除存储桶中的对象?我正在寻找某种用户身份验证方法。

1 个答案:

答案 0 :(得分:1)

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

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处理。