Quiero ocultar selectivamente algunos recursos en función de alguna forma de autenticación en web.py, pero su existencia se revela en 405 respuestas a cualquier método HTTP que no haya implementado.web.py: ¿Cómo ocultar selectivamente los recursos con 404s para cualquier método HTTP?
He aquí un ejemplo:
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()
Cuando una solicitud de método indefinido se emite, el recurso se reveló:
$ 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
...
pude aplicar la misma comprobación de los otros métodos comunes en la especificación HTTP , pero un cretino creativo podría inventar el suyo:
$ 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
...
Es Hay una forma de implementar un método catch all en una clase web.py para cualquier método HTTP, así puedo asegurarme de que se ejecute la verificación de seguridad.
¿O existe una forma alternativa de ocultar estos recursos?
Un atacante puede inventar cualquier método nombre que les gusta. Si comienzo a definir los métodos para cada posibilidad, voy a extrañar mi fecha límite :) –