【问题标题】:Limiting access to a static file with GAE使用 GAE 限制对静态文件的访问
【发布时间】:2010-09-11 21:54:04
【问题描述】:

我有一个不想公开的静态文件。有没有办法限制对 app.yaml 的访问,使其只能由自己的域加载?

基于 web2py 的解决方案也受到欢迎,因为我在 GAE 之上使用它。

谢谢!

【问题讨论】:

    标签: google-app-engine web2py


    【解决方案1】:

    您可以使用“login: required”来限制对它的访问,以要求使用 Google 帐户登录,或者使用“login: admin”将其限制为仅限管理员。如果您只关心滥用问题,则可能需要查看DOS API

    【讨论】:

    • 谢谢尼克。至于使用 login:required 或 login:admin 限制静态文件,是否可以使用 urllib.urlopen 或类似的东西传入登录凭据以便在运行时下载数据?
    • 有可能,是的 - 查看 SDK 源代码中的 appengine_rpc.py 以获取有关如何对 App Engine 进行经过身份验证的调用的示例。
    【解决方案2】:

    我假设您想为此使用 web2py 身份验证。你必须遵循一些简单的规则。 1) app/static 中的文件是公共文件。 2)您要进行身份验证的文件放在 app/private 中。然后创建您自己的 web2py 操作来服务器私有/的内容/

    @auth.requires()
    def private():
        import os
        file = os.path.join(request.folder, 'private', request.args(0))
        return response.stream(open(file,'rb'))
    

    如果您想使用基于角色的访问控制,您需要将文件名存储在数据库表中,并将 auth.add_permission 存储到组到记录中。

    如果您向 web2py 邮件列表提问,您将获得更快的响应和更有效的响应。

    【讨论】:

    • 我很确定这不适用于 App Engine,因为文件不是托管在真实的文件系统中。
    • 视情况而定。我在开发时提供的假设文件下回答。在这种情况下,它将在 GAE 上运行。如果我们谈论的是上传到应用程序中的文件,那么 web2py 解决方案很简单。使用 Field('file','upload',authorize=lambda row: row.author==auth.user_id) 和 Field('author',db.auth_user,default=auth.user_id) 制作表格并使用 form=crud .create(db.thetable) 将图像上传到表中(受 GAE 文件大小限制)这在本书的第 3 章中进行了广泛讨论,并且其中的所有示例都可以在 GAE 中开箱即用。
    • 感谢 Mossimo 的回复。我在这里而不是邮件列表发布,因为我希望有一个快速的 app.yaml 解决方案,但现在我决定对我的任务采取完全不同的方法,不涉及在 GAE 上使用该文件。我会牢记您的解决方案,以备不时之需。
    • 在发送文件之前有什么方法可以替换吗?
    猜你喜欢
    • 2014-08-04
    • 1970-01-01
    • 2011-08-06
    • 2012-04-06
    • 2021-09-08
    • 2015-02-21
    • 2011-01-12
    相关资源
    最近更新 更多