0

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

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

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

我怎样才能保护我在用户控制器中的 action_savepoints 以防止人们将其作为 URL 输入?

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

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

谢谢你的帮助。

4

2 回答 2

1

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

或者:

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

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

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

于 2012-08-25T21:16:44.583 回答
0

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

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

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

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

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

不幸的是,除此之外,没有防弹或安全的方法来检测 AJAX 请求。

于 2012-08-19T14:16:26.550 回答