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