【问题标题】:How to hide ajax page from public access [codeigniter]如何从公共访问中隐藏 ajax 页面 [codeigniter]
【发布时间】:2012-10-25 14:09:01
【问题描述】:

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

【问题讨论】:

  • 你能向那个函数/页面添加类似 is_ajax_request 的代码
  • 是的,非常感谢,我之前没有注意到这个方法。我认为这可以完成工作:) 非常感谢
  • 请参阅this answer 了解此特定问题的正确解决方案;请参阅this answer 获取实际示例(ajax 调用使用的代理,不应直接或远程访问,只返回 403)

标签: php ajax codeigniter


【解决方案1】:

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

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

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

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

【讨论】:

  • IP 与查看推荐人一样好,正如我(现在被否决)的建议。说这是不可能的,认为 zarkoz 知道,就像“隐藏”图像一样 - 目标显然是保护 ajax 的响应,而不是 ajax-url 本身。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    您可以像 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/

    【讨论】:

    • 这只能防止 CSRF。它不会阻止第三方网站请求随机数,然后直接从他们的服务器访问 API。
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      你可以使用 is_ajax_request() 它会返回真/假

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-12-06
        • 2012-05-25
        • 2011-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多