为了账号安全,请及时绑定邮箱和手机立即绑定

根据 php 中的引用 URL 做一些事情

根据 php 中的引用 URL 做一些事情

PHP
饮歌长啸 2022-07-09 09:53:11
我有这个代码,它运行良好<?phpif(strstr($_SERVER['HTTP_REFERER'], 'example.com')){  echo 'yes';   } else {    echo 'no';  }?>问题是如果访问也来自 example2.com,我如何获得肯定我试过了,但它不工作<?php    if(strstr($_SERVER['HTTP_REFERER'], 'example.com' or 'example2.com')){      echo 'yes';       } else {        echo 'no';      }    ?>有解决办法吗?
查看完整描述

1 回答

?
蓝山帝景

TA贡献1843条经验 获得超7个赞

一种简单的方法是创建一个允许值的数组,并使用循环。创建一个布尔值,说明用户是否来自允许的站点,将其默认设置为 false。在遍历允许的站点时,如果引用者匹配任何允许的站点,则将此布尔值更改为 true。


$allowed_sites = ['example.com', 'example2.com'];


$referrer_is_allowed = false;


foreach($allowed_sites as $url) {

    if(strstr($_SERVER['HTTP_REFERER'], $url)) {

        $referrer_is_allowed = true;

    }

}


echo $referrer_is_allowed ? 'yes' : 'no';

请记住,这并不能保证任何特定用户实际上来自HTTP_REFERER您正在检查的用户,原因有几个。


$_SERVER['HTTP_REFERER']很容易被欺骗,并且不能真正信任安全性。

诸如此类的引用者site_not_allowed.com/example.com仍会通过此检查。

您至少可以通过检查引荐来源网站是否以允许的网站开头来保护自己免受第二个问题的影响,如下所示:


foreach($allowed_sites as $url) {

    $referrer = str_replace(['http://', 'https://'], ['',''], $_SERVER['HTTP_REFERER']);

    if(substr($referrer, 0, strlen($url)) === $url) {

        $referrer_is_allowed = true;

    }

}


查看完整回答
反对 回复 2022-07-09
  • 1 回答
  • 0 关注
  • 96 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信