【问题标题】:Amazon s3 php safely deleting objectsAmazon s3 php 安全删除对象
【发布时间】:2012-09-10 06:58:01
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案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 处理。

    【讨论】:

    • 谢谢,我会测试一下!我不确定您是否尝试过此操作,但我注意到在 S3 中您可以为对象创建元数据。假设我创建了一个名为 username 的元数据,它在上传图像时填充了用户的用户名。我可以通过将用户名与元数据进行比较来授权用户吗?这样我就不必使用数据库了。
    • @Cyber​​Junkie 你可以这样做,但调用 S3 中的每个项目以获取其元数据将比从其他形式的持久存储中检索与用户关联的项目列表要长得多。
    猜你喜欢
    • 2014-01-09
    • 1970-01-01
    • 2022-11-05
    • 2015-04-09
    • 2013-08-23
    • 2014-04-16
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    相关资源
    最近更新 更多