我已经搜索了之前的答案,但似乎找不到确切的答案。
我正在使用ajax调用一个控制器操作。这个控制器动作做了一些其他的事情,然后调用我的用户控制器的公共函数:
Request::factory("/user/savepoints/".$new_total);如何确保用户控制器中的action_savepoints不会被用户以网址的形式输入?
我目前在我的函数的顶部有这个,但它不能做我想要的。
if( ! $this->request->is_initial() ):
HTTP::redirect('/error');
endif;谢谢你的帮助。
发布于 2012-08-26 05:16:45
要么使用HTTP POST请求,这不是仅仅通过输入URL就能完成的。(虽然它可以被欺骗,或者通过表单完成)
或者:
如何在服务器上生成一种令牌,以某种方式将其传递给ajax代码,然后在ajax请求中传递回来。
显然,如果他们从你的页面中取出令牌,他们仍然可以手动伪造请求,但你首先向他们发出了令牌。
您可以将令牌设置为单次使用、有时间限制或特定于用户。确保它包含某种带有服务器密钥的校验和,以防止人们构建自己的令牌。
发布于 2012-08-19 22:16:27
您是要防止任何未经授权的用户运行脚本,还是要确保脚本只能通过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请求。
https://stackoverflow.com/questions/12019420
复制相似问题