V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
huaxing0211
V2EX  ›  程序员

PHP 如何判断 ajax 发起请求的来源地址?

  •  
  •   huaxing0211 · 2018-04-22 12:50:15 +08:00 · 5317 次点击
    这是一个创建于 2402 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如,http://www.xx.com/a.php 包含一个了 b.js,b.js 里面有 ajax 请求:

    $.ajax({
    url : "http://www.yy.com/c.php?",
    dataType : "jsonp",
    ......
    

    在在 yy.com 域名下的 c.php 中如何判断来源是 www.xx.com

    15 条回复    2018-04-23 21:04:17 +08:00
    lsido
        1
    lsido  
       2018-04-22 13:04:08 +08:00 via iPhone
    获取 referer
    huaxing0211
        2
    huaxing0211  
    OP
       2018-04-22 13:14:42 +08:00
    @lsido 地址栏直接输入的话应该是空的,这里用 referer,发现也是空……
    KKKKKK
        3
    KKKKKK  
       2018-04-22 13:32:31 +08:00 via iPhone
    Cors 了解一下
    qinrui
        4
    qinrui  
       2018-04-22 13:37:23 +08:00 via iPhone
    跨域能 ajax 么?
    huaxing0211
        5
    huaxing0211  
    OP
       2018-04-22 13:41:15 +08:00
    @qinrui jsonp
    xiaome
        6
    xiaome  
       2018-04-22 14:50:11 +08:00
    判断来源地址,好像没办法保证绝对准确;都是可以伪造的内容。
    如果你是想防止别人改内容请用 CSRF,如果是想防止别人请求你的接口使用一个可靠 token 即可
    580a388da131
        7
    580a388da131  
       2018-04-22 14:51:06 +08:00
    页面跳转才有 HTTP_REFERER,直接打开、Javascript、Refresh、Header 没有 HTTP_REFERER。
    580a388da131
        8
    580a388da131  
       2018-04-22 14:52:50 +08:00
    HTTP_REFERER 做个防盗链就好,不要做安全检查,可以随便改的。
    给接口加个验证。
    leven87
        9
    leven87  
       2018-04-22 15:00:15 +08:00
    可以在浏览器里面看下 ajax 请求中 eferer 字段的值。如果没有采用其他方法判断。
    leven87
        10
    leven87  
       2018-04-22 15:00:31 +08:00
    referer
    wsly47
        11
    wsly47  
       2018-04-22 15:32:47 +08:00 via iPhone
    $_SERVER['HTTP_REFERER']
    lsido
        12
    lsido  
       2018-04-22 16:33:04 +08:00   ❤️ 1
    @huaxing0211 是这个意思吗?





    wwwicbd
        13
    wwwicbd  
       2018-04-22 22:00:11 +08:00
    如果是 CSRF 防护的话, 推荐使用身份验证 token,在 server 检查 token 的合法性。
    rails 做的就很好,默认都支持好了,可以参考 https://ruby-china.org/topics/35199
    checgg
        14
    checgg  
       2018-04-22 22:50:32 +08:00   ❤️ 1
    从 http header 里面哪 refer 去判断就行.
    不过,为什么要判断呢?
    客户端所有的参数都是可以伪造的,是不可信的.
    判断的意义不大,自己骗自己而已.
    CSRF 一般是用 token 去解决,详情请搜索 JWT.
    huaxing0211
        15
    huaxing0211  
    OP
       2018-04-23 21:04:17 +08:00
    @lsido 感谢,完全是这个意思,已解决!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5893 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 02:41 · PVG 10:41 · LAX 18:41 · JFK 21:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.