服务器头,引用等

时间:2011-05-27 11:54:59

标签: php javascript http-headers

我有一个名为javascript.php的脚本,我在我的html中包含在我的SCRIPT标记中,如下所示:

<script type="text/javascript" src="javascript.php"></script>

我想知道的是,是否可以在javascript.php下检查是否有人直接访问过它,例如:

http://myhost.com/javascript.php

如果有人将其包含在他的HTML中?

更确切地说:如果客户端直接通过URL或HTML源代码下的SCRIPT请求请求客户端,是否会收到一个标头服务器?

3 个答案:

答案 0 :(得分:3)

不,不会有任何保证。

答案 1 :(得分:1)

$_SERVER['HTTP_REFERER']

但这是从用户代理发送的,这意味着他们可以发送任何他们想要的内容

答案 2 :(得分:1)

简单的解决方案,可以减少“愚蠢”尝试包括你的脚本:

if(!empty($_SERVER['HTTP_REFERRER'])){
    $parts = parse_url($_SERVER['HTTP_REFERRER']);
    $allowed_hosts = array('example.com');

    if(!in_array($parts['host'], $allowed_hosts)) {
        exit;
    }
}

如上所述,引用者标题可以轻松操作。如果要真正防止此问题,可以在脚本路径中添加一些使用简单规则生成的GET参数,然后检查它们。例如:

<强>的index.php

$c1 = rand();
$c2 = md5($c1.'HAHA');
$codes = '?c1='.$c1.'&c2='.$c2;
...
<script type="text/javascript" src="javascript.php<?php echo $codes; ?>"></script>

<强>的script.php

if(!isset($_GET['c1']) || !isset($_GET['c2']) || md5($_GET['c1'].'HAHA') != $_GET['c2']) {
    exit;
}
...

缺少此解决方案的是浏览器不会缓存您的JS文件,因为每次都会调用不同的参数。