Je veux cacher sélectivement certaines ressources basées sur une certaine forme d'authentification dans web.py, mais leur existence est révélée par 405 réponses à n'importe quelle méthode HTTP que je n'ai pas implémentée.web.py: Comment masquer sélectivement des ressources avec 404 pour n'importe quelle méthode HTTP?
Voici un exemple:
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()
Lorsqu'une demande de méthode non définie est émise, la ressource est révélé:
$ 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
...
je pourrais mettre en œuvre la même vérification pour les autres méthodes communes dans la spécification HTTP , mais un méchant créatif pourrait inventer leur propre:
$ 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
...
Est il existe un moyen d'implémenter une méthode catch all dans une classe web.py pour n'importe quelle méthode HTTP, donc je peux m'assurer que la vérification de sécurité sera exécutée?
Ou existe-t-il une autre façon de masquer ces ressources?
Un attaquant peut inventer quelque méthode nom qu'ils aiment. Si je commence à définir des méthodes pour chaque possibilité, je vais manquer mon délai :) –