您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python – web.py:如何使用404s有选择地隐藏任何HTTP方法的资源?

5b51 2022/1/14 8:21:25 python 字数 4503 阅读 504 来源 www.jb51.cc/python

我想根据web.py中的某种形式的身份验证有选择地隐藏一些资源,但是它们的存在是由我对任何尚未实现的HTTP方法的405响应所揭示的.这是一个例子:import web urls = ( '/secret', 'secret', ) app = web.application(urls, globals()) class secret(

概述

我想根据web.py中的某种形式的身份验证有选择地隐藏一些资源,但是它们的存在是由我对任何尚未实现的HTTP方法的405响应所揭示的.

这是一个例子:

import web

urls = (
    '/secret','secret',)

app = web.application(urls,globals())

class secret():
    def GET(self):
        if web.cookies().get('password') == 'secretpassword':
            return "Dastardly secret plans..."
        raise web.notfound()

if __name__ == "__main__":
    app.run()

发出未定义的方法请求时,将显示资源:

$curl -v -X DELETE http://localhost:8080/secret
...
> DELETE /secret HTTP/1.1
...
< HTTP/1.1 405 Method Not Allowed
< Content-Type: text/html
< Allow: GET
...

我可以对HTTP规范中的其他常见方法执行相同的检查,但是创造性的不法分子可能会创建自己的:

$curl -v -X SHENANIGANS http://localhost:8080/secret
...
> SHENANIGANS /secret HTTP/1.1
...
< HTTP/1.1 405 Method Not Allowed
< Content-Type: text/html
< Allow: GET
...

有没有办法在web.py类中为任何HTTP方法实现catch all方法,所以我可以确保运行安全检查?

或者是否有另一种隐藏这些资源的方法

import types

class application(web.application):
    def _delegate(self,f,fvars,args=[]):
        def handle_class(cls):
            meth = web.ctx.method
            if meth == 'HEAD' and not hasattr(cls,meth):
                meth = 'GET'
            if not hasattr(cls,meth):
                if hasattr(cls,'_default'):
                    tocall = getattr(cls(),'_default')
                    return tocall(*args)
                raise web.nomethod(cls)
            tocall = getattr(cls(),meth)
            return tocall(*args)

        def is_class(o): return isinstance(o,(types.ClassType,type))
        ...

实例:

app = application(urls,globals())

页面类:

class secret():
    def _default(self):
        raise web.notfound()

    def GET(self):
        ...

我更喜欢这种解决方案,因为它可以保持页面类清洁,并在一个地方提供进一步的自定义委派过程.例如,我想要的另一个功能是透明重载POST(例如,使用method = DELETE将POST请求重定向页面类的DELETE方法),这里也很容易添加

            ...
            meth = web.ctx.method
            if meth == 'POST' and 'method' in web.input():
                meth = web.input()['method']
            ...

总结

以上是编程之家为你收集整理的python – web.py:如何使用404s有选择地隐藏任何HTTP方法的资源?全部内容,希望文章能够帮你解决python – web.py:如何使用404s有选择地隐藏任何HTTP方法的资源?所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶