【问题标题】:Kohana request security小花请求安全
【发布时间】:2012-08-18 14:35:42
【问题描述】:

我已经搜索过以前的答案,但似乎找不到确切的答案。

我正在使用 ajax 来调用控制器操作。此控制器操作执行其他一些操作,然后调用我的用户控制器的公共函数:

Request::factory("/user/savepoints/".$new_total);

如何保护我在 User 控制器中的 action_savepoints 不让人们将其作为 URL 输入?

我目前在我的函数顶部有这个,但它没有做我想要的。

if( ! $this->request->is_initial() ):
   HTTP::redirect('/error');
endif;

感谢您的帮助。

【问题讨论】:

  • $this->request->is_initial() 有什么问题?您只想允许 HMVC 请求吗?另一种方法 - 只需使用 savepoints() 方法创建一个助手。

标签: model-view-controller kohana


【解决方案1】:

要么使用 HTTP POST 请求,这不能仅通过输入 URL 来完成。 (虽然它可以被欺骗,或者通过表单完成)

或者:

如何在服务器上生成一种令牌,以某种方式将其传递给 ajax 代码,然后将其传递回 ajax 请求中。

显然,如果他们将令牌从您的页面中提取出来,他们仍然可以手动伪造请求,但您首先向他们颁发了令牌。

您可以将令牌设为一次性、有时间限制或特定于用户。 确保它包含某种带有服务器机密的校验和,以防止人们构建自己的令牌。

【讨论】:

    【解决方案2】:

    您想阻止任何未经授权的用户运行该脚本,还是想确保该脚本只能通过 AJAX 调用运行?

    首先,您可以检查用户是否已登录。AJAX 请求使用与普通请求相同的会话。

    if (Auth::instance()->logged_in())
    

    其次,如果是 AJAX 调用,您需要检查 HTTP 标头。但请注意,这不是一种安全的方法,因为 HTTP 标头可以被客户端更改并且不能被信任。

    if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && 
    strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
    {
        //This is an ajax call
    }
    

    很遗憾,除此之外,没有其他可靠或安全的方法来检测 AJAX 请求。

    【讨论】:

    • 我想防止人们将网址直接放入浏览器并能够使用该功能。我需要能够区分手动 url 输入和子请求。
    • 注意子请求这个术语;在 kohana 中,它意味着更具体的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    • 2016-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多