如何防止用户通过在地址栏中输入操作来访问操作?

How to prevent user from accessing an action by typing it to address bar?

我的控制器中有一个方法 potentially_dangerous_method()。我不希望用户在任何时候都可以访问它,因为它会删除和插入一些数据库记录。我只想要另一个操作 bouncer()(并且只有那个)来调用它,并且该操作具有所有适当的验证和检查,因此它知道该方法确实可以被调用。

但就目前而言,用户只需在地址栏中键入 [application]/[controller]/potentially_dangerous_method 即可访问该方法。我该如何预防?

如果 potentially_dangerous_method 不需要作为其自己的 HTTP 端点直接访问,那么您可以将其包含在控制器中并通过 (a) 以双下划线开头的名称(即, __potentially_dangerous_method) 或 (b) 用参数定义它(例如 def potentially_dangerous_method(arg1, arg2):)。请参阅 dispatching.

上的文档

或者,您可以在模型文件或模块中定义此类函数。

最后,如果确实需要通过 HTTP 请求直接访问此类功能,您可以使用 @auth.requires_signature() 装饰器通过 digitally signed URLs 保护它们。