Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 服务器头、引用器等_Php_Javascript_Http Headers - Fatal编程技术网

Php 服务器头、引用器等

Php 服务器头、引用器等,php,javascript,http-headers,Php,Javascript,Http Headers,我有一个名为javascript.php的脚本,它包含在html的脚本标记中,如下所示: <script type="text/javascript" src="javascript.php"></script> 如果有人把它包含在他的HTML中 更准确地说:如果客户端直接通过URL请求,或者通过HTML源下的脚本请求请求,服务器是否会收到来自客户端的头文件?不,这不能保证 $_SERVER['HTTP_REFERER'] $\u服务器['HTTP\u REFERER'

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

<script type="text/javascript" src="javascript.php"></script>
如果有人把它包含在他的HTML中


更准确地说:如果客户端直接通过URL请求,或者通过HTML源下的脚本请求请求,服务器是否会收到来自客户端的头文件?

不,这不能保证

$_SERVER['HTTP_REFERER'] $\u服务器['HTTP\u REFERER']
但这是从用户代理发送的,这意味着他们可以发送任何他们想发送的内容,这是一个简单的解决方案,可能会减少包含脚本的“愚蠢”尝试:

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>
if(!isset($_GET['c1']) || !isset($_GET['c2']) || md5($_GET['c1'].'HAHA') != $_GET['c2']) {
    exit;
}
...

这种解决方案的不足之处在于浏览器不会缓存JS文件,因为每次都会使用不同的参数调用它。

不用麻烦了。萤火虫会轻而易举地击败它,他是对的。有一个referer头,但它可以很容易地进行操作。我需要知道它是作为脚本包含在HTML中,还是直接访问,仅此而已:)
if(!isset($_GET['c1']) || !isset($_GET['c2']) || md5($_GET['c1'].'HAHA') != $_GET['c2']) {
    exit;
}
...