首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kohana请求安全性

Kohana请求安全性
EN

Stack Overflow用户
提问于 2012-08-18 22:35:43
回答 2查看 208关注 0票数 0

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

我正在使用ajax调用一个控制器操作。这个控制器动作做了一些其他的事情,然后调用我的用户控制器的公共函数:

代码语言:javascript
复制
Request::factory("/user/savepoints/".$new_total);

如何确保用户控制器中的action_savepoints不会被用户以网址的形式输入?

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

代码语言:javascript
复制
if( ! $this->request->is_initial() ):
   HTTP::redirect('/error');
endif;

谢谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-26 05:16:45

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

或者:

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

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

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

票数 1
EN

Stack Overflow用户

发布于 2012-08-19 22:16:27

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

对于第一种情况,您可以只检查用户是否已登录。AJAX请求使用与普通请求相同的会话。

代码语言:javascript
复制
if (Auth::instance()->logged_in())

对于第二种情况,如果是AJAX调用,则需要检查HTTP头。但请注意,这不是一种安全的方法,因为HTTP标头可以由客户端更改,并且不能被信任。

代码语言:javascript
复制
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && 
strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
{
    //This is an ajax call
}

不幸的是,除了这个之外,没有其他可靠或安全的方法来检测AJAX请求。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12019420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档