3

我有一个用于 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文件放在其他地方?如果是这样,我可以使用哪个网址来访问它

4

5 回答 5

2

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

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

如果你想限制它的使用,那么你只能使用认证+授权(所以只有登录的用户才能访问它)。

(您还可以查看基于 IP 地址的速率限制,以使第三方站点更难直接使用 API)

于 2012-10-25T14:11:58.700 回答
1

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

于 2012-10-25T14:12:17.940 回答
1

您可以像 WordPress 那样实现一个使用一次(随机数)系统的数字。几乎服务器为客户端分配了一个数字。当客户端将请求发送回服务器时,它也会发送随机数。服务器将收到的随机数与之前分配的随机数进行对比。如果 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/

于 2012-10-25T14:34:38.830 回答
0

尝试使用会话来控制谁可以访问 ajax url,因为在 ajax 中隐藏 url 是不可能的。

于 2012-10-25T14:16:26.047 回答
0

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

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

于 2012-10-25T15:28:04.843 回答