我有一个 Laravel 应用程序,它使用 S3 存储来存储个人资料图片,但也用于存储契约(Contract)等敏感内容。
例如,如果我提供图像,我会得到以下 URL:"bucket_name".s3."region".scw.cloud/"Content"
。
仅当用户访问我的网站时,我才想获取此 URL 的内容。 因为现在如果我复制/粘贴地址,每个人都可以访问它。
感谢您的帮助
最佳答案
有多种方法可以处理此问题,具体取决于您想要的安全程度:
- 正如 @jarmod 建议的那样,您可以设置引用 header 过滤器。这是可行的,但如果您有坚定的黑客,则可以伪造。
- 您可以创建 presigned URL对于该文档。这允许您在决定的时间内进行访问。例如,如果您只需要一个有效期为 3 分钟的 URL,您可以生成它并发送。即使有人获得了该 URL,它的有效期也是有限的。
- 您的 Laravel 应用程序可以充当 S3 内容的代理。您的 S3 存储桶将是私有(private)的,您的应用程序将有权从该存储桶中读取数据。当收到文件请求时,它将发送到您的应用程序,应用程序将从 S3 读取文件并将其传递给最终用户。通过这种方式,您可以确信您的用户已登录并且能够访问该文件。但是,这可能需要更多时间,因为现在您需要从 S3 读取(尽管您可能能够实现一些缓存),然后将文件写入最终用户。
关于laravel - 如何仅在我的网站中提供 S3 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71267652/