如何从公共访问中隐藏ajax页面[codeigniter]

时间:2012-10-25 14:09:01

标签: php ajax codeigniter

我有一个控制器用于ajax调用,所以在jQuery中我有类似的东西:

$.ajax({ 
  type: 'POST',
  url: '<?php echo base_url().'ajax/post_message'; ?>',
  data: { message: msg }
}).done(function(data) { 
    // handling callback here               
});

这里的ajax / post_message工作正常,但也可以直接从URL访问。

如何防止这种情况,应该将ajax文件放在其他地方?如果是这样,我可以使用哪个网址来访问它

5 个答案:

答案 0 :(得分:2)

如果您想将它用于Ajax,那么浏览器必须能够访问它。

如果浏览器必须能够访问它,那么URI就不是秘密。

如果您想将其使用限制在某些人身上,那么您只能使用身份验证+授权(因此只有登录的用户才能访问它)。

(您还可以根据IP地址查看速率限制,以使第三方网站更难直接使用API​​)

答案 1 :(得分:1)

不,因为技术上Ajax查询只是简单的HTTP get / post请求

答案 2 :(得分:1)

你可以实现像WordPress一样使用一次(nonce)系统的数字。服务器几乎为客户端分配了一个号码。当客户端将请求发送回服务器时,它也会发送nonce。服务器检查收到的nonce与之前分配的nonce。如果nonce有效,则服务器处理请求并丢弃nonce(因为它已被使用过一次并且不再有效)。如果发送到服务器的nonce无效或未发送,则服务器不会处理该请求。

你可以根据自己的喜好扩展这个nonce进程,也许nonce只在一段时间内有效......谁知道呢。

一些资源解释了它在WordPress中的使用方式: http://markjaquith.wordpress.com/2006/06/02/wordpress-203-nonces/

http://www.prelovac.com/vladimir/improving-security-in-wordpress-plugins-using-nonces

http://www.techytalk.info/securing-your-wordpress-plugin-ajax-calls-using-nonces/

答案 3 :(得分:0)

尝试使用会话来控制谁可以访问ajax网址,因为无法在ajax中隐藏网址。

答案 4 :(得分:0)

你可以使用is_ajax_request()它将返回true / false

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