Php 服务器头、引用器等
我有一个名为javascript.php的脚本,它包含在html的脚本标记中,如下所示: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'
<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;
}
...