是否可以允许从一个站点到页面的流量?

时间:2011-03-10 02:02:19

标签: php .htaccess

我一直在反对这个问题一周。我有一个页面,我们只想从其他域访问。有可能使用PHP或.htaccess吗?我已经在这里发布了几次尝试这样做,似乎没有任何效果。请帮忙!

<?php

$allowed_domains = array('dirtybirddesignlab.com','foo.com');

$REFERRER = $_SERVER['HTTP_REFERER'];

if ($REFERRER == '') {
    exit(header('Location: 404.php'));
}

$domain = substr($REFERRER, strpos($REFERRER, '://')+3);
$domain = substr($domain, 0, strpos($domain, '/'));

if (!in_array($domain, $allowed_domains)) {
    exit(header('Location:404.php'));
}

?>

3 个答案:

答案 0 :(得分:6)

要扩展我的评论,请参阅第if ($REFERRER == '')栏。

<?php

$allowed_domains = array('mydomain.com','yourdomain.com');

$REFERRER = $_SERVER['HTTP_REFERER'];

if ($REFERRER == '') {
    // What do you do here?
}

$domain = substr($REFERRER, strpos($REFERRER, '://')+3);
$domain = substr($domain, 0, strpos($domain, '/'));

if (!in_array($domain, $allowed_domains)) {
    exit(header('Location: error.php'));
}

?>

注意,以上内容将始终引用那些未报告引荐来源的浏览器重定向到error.php页面。

我的建议是做一些像......

  1. 生成salt,与其他服务器共享($ dsalt =来自puttygen.exe的输出)
  2. 在响应期间在另一个域上生成共享密钥 - $ dkey = sha1($ dsalt.date('mDY G'))
  3. 将$ dkey放入请求页面,生成“http://www.mydomain.com/getstuff-ajax.php?key= $ dkey”
  4. 在您的服务器上重新创建相同的$ dkey,并与GET中的$ dkey进行比较以检测非允许访问
  5. 例如......

    他们的域名

    <?php
    
    $dsalt = "AAAAB3NzaC1yc2EAAAABJQAAAIBNnuGAM6ZKURAS9h9ag".
             "H85T1eIE+jlLkq7GhFny8wMJNpSM0stTDWeEYfL+4xWIE".
             "lIF3NFvRpDAG/cgXuVmlBcO0ZxxKosrDv0dXCXNt5ciPJ".
             "UjFi1e0FEJtkO32xrTDEB2IUg9rZ0tiqqsqnTCZBQ4AEvpMi";
    
    $dkey = sha1($dsalt.date('mDY G'));
    
    // ... Other stuff or whatnot, possible the above is also just an include file
    
    // Then, they use it...
    
    echo "<a href=\"http://yourdomain.com/download.php?key=$dkey\">Download stuff</a>";
    
    ?>
    

    您的域名 - 包含('/ path / to / domaincheck.php')

    <?php
    
    $dkey = $_GET['key'];
    
    $dsalt = "AAAAB3NzaC1yc2EAAAABJQAAAIBNnuGAM6ZKURAS9h9ag".
             "H85T1eIE+jlLkq7GhFny8wMJNpSM0stTDWeEYfL+4xWIE".
             "lIF3NFvRpDAG/cgXuVmlBcO0ZxxKosrDv0dXCXNt5ciPJ".
             "UjFi1e0FEJtkO32xrTDEB2IUg9rZ0tiqqsqnTCZBQ4AEvpMi";
    
    if (sha1($dsalt.date('mDY G')) != $dkey) {
        exit(header('Location: error.php'));
    }
    
    ?>
    

    请注意$ dsalts是相同的。我用puttgen.exe生成了它。

    这些方面的东西。您将需要处理密钥可能过期的情况,或诸如此类的东西。另一种方法可能是在具有时间戳的服务器之间共享有效的$ dkey,并在一定时间(可能是一小时)之后使它们到期。

    theirserver.com和yourserver.com

    1. Salt,或者换句话说,私钥,两台服务器上都相同
    2. 使用salt和一些日期戳创建(重新)哈希的函数,两个服务器上都相同
    3. <强>浏览器

      1. 指向yourserver.com的链接包括从静态盐和日期戳功能
      2. 创建的生成密钥(哈希)

答案 1 :(得分:2)

您可以使用以下内容:

<?php
$allowed = array("xxx.xxx.xxx.xxx", "xxx.xxx.xxx.xxx");
$ip = $REMOTE_ADDR;
if(!in_array($ip, $allowed))
{
header("Location: index.php"); 
exit;
}
?>

将xxx.xxx.xxx.xxx替换为网站的IP地址?

它将检查流量的IP地址,如果它不在数组中,则会将它们重定向到标题位置中定义的其他位置

根据检查引用者是否来自某个页面,试试这个:

<?php
$referer = $_SERVER['HTTP_REFERER'];
$referer_parse = parse_url($referer);

if($referer_parse['host'] == "mysite.com" || $referer_parse['host'] == "www.mysite.com") {
     // download...
} else {
     header("Location: http://www.mysite.com");
     exit();
}
?>

答案 2 :(得分:1)

使用.htaccess尝试以下内容。

订单允许,否认
否认所有人 允许“域名允许不带www”

如果域名不起作用,请尝试
允许来自“IP地址”

在实际档案中排除“”。