laravel - 如何仅在我的网站中提供 S3 对象

标签 laravel amazon-web-services amazon-s3

我有一个 Laravel 应用程序,它使用 S3 存储来存储个人资料图片,但也用于存储契约(Contract)等敏感内容。 例如,如果我提供图像,我会得到以下 URL:"bucket_name".s3."region".scw.cloud/"Content"

仅当用户访问我的网站时,我才想获取此 URL 的内容。 因为现在如果我复制/粘贴地址,每个人都可以访问它。

感谢您的帮助

最佳答案

有多种方法可以处理此问题,具体取决于您想要的安全程度:

  1. 正如 @jarmod 建议的那样,您可以设置引用 header 过滤器。这是可行的,但如果您有坚定的黑客,则可以伪造。
  2. 您可以创建 presigned URL对于该文档。这允许您在决定的时间内进行访问。例如,如果您只需要一个有效期为 3 分钟的 URL,您可以生成它并发送。即使有人获得了该 URL,它的有效期也是有限的。
  3. 您的 Laravel 应用程序可以充当 S3 内容的代理。您的 S3 存储桶将是私有(private)的,您的应用程序将有权从该存储桶中读取数据。当收到文件请求时,它将发送到您的应用程序,应用程序将从 S3 读取文件并将其传递给最终用户。通过这种方式,您可以确信您的用户已登录并且能够访问该文件。但是,这可能需要更多时间,因为现在您需要从 S3 读取(尽管您可能能够实现一些缓存),然后将文件写入最终用户。

关于laravel - 如何仅在我的网站中提供 S3 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71267652/

相关文章:

Android - AWS s3 谷歌登录

amazon-s3 - 如何将 png 文件上传到 S3 Bucket?

php - 无法在 Excel::load() 之外获取对象名称值

php - Laravel 5.1 - 给我最近的行 - lastOrFail

https - 在本地和生产环境中的Laravel Assets 在http和https之间切换

PHP 连接到 aws。连接被拒绝

amazon-web-services - 如何使用 AWS CLI 在 Redshift 数据库上运行查询

laravel - 如何在 Eloquent 关系中对数据透视表列进行 GROUP 和 SUM?

javascript - 如何确保每次使用 React Native 和 AWS 都会导入我的个人资料信息?

amazon-web-services - 如何在粘合作业中添加当前时间戳(额外列),以便输出数据具有额外列