如何防止直接存取控制器?(How to protect controller against dir

2019-08-01 11:24发布

我使用的是笨使用jQuery,如果你给我解释一下如何保护从直接存取控制器这将是很好。 例如,我有图与标准的jquery行:

$('#handler').load('tools/get_stats');

工具是我的一个读取统计功能控制器。 如果我写脚本的浏览器的详细地址直接http://site.com/tools/get_stats ,浏览器当然是开放的,即数据。 如何保护从浏览器直接访问控制器? 我想我的数据加载为唯一考虑,不会对控制器的直接访问。

Answer 1:

的笨输入级有一个方法叫做is_ajax_request()用于此目的。

if ($this->input->is_ajax_request()) 
{
    //do something
} 
else 
{
    show_error("No direct access allowed");
    //or redirect
} 

如果你有一个专用的Ajax控制器,你当然可以包括在这一逻辑__construct()方法,否则可能会在一个方法,通过方法的基础上你的控制器内实现。


看到:

  • http://ellislab.com/codeigniter/user_guide/libraries/input.html


Answer 2:

一般来说,你不能做一个有意义的方式由于需要提供访问和HTTP的简单性。 以上基本上,你不能拒绝访问,您需要提供(在这种情况下,无状态的连接信息)的信息。 最好的最初步骤,以确保控制器只允许访问数据的用户应该能够访问(不管他们如何连接),而不是试图基于与请求信息的篡改容易限制。

话虽这么说,如果你有一些奇怪的原因,在此之后,真正追,你可以使用某种形式的单次使用令牌与AJAX请求传递的。 你可以,例如,生成一个随机密钥,坚持它的地方(最好只在内存中像哈希表,因为永远不应该有一个足够长的延迟,否则以保证),并与将颁发AJAX页面传出来请求。 令牌传递回来的请求,并去掉,然后该标记将不再有效。 该控制器将不能够直接访问,因为它需要一个令牌。

仍然能够被周围的工作,因为这一过程可以停止和使用颁发的令牌,但它会阻止任何人都只是卷曲(所以它真的不值得努力)玩耍。

长话短说,你不能以任何方式,任何人都不能在10分钟内解决做到这一点。 专注于确保你只露出你想要的数据,无论其如何检索。



文章来源: How to protect controller against direct access?