我有一个名为javascript.php的脚本,我在我的html中包含在我的SCRIPT标记中,如下所示:
<script type="text/javascript" src="javascript.php"></script>
我想知道的是,是否可以在javascript.php下检查是否有人直接访问过它,例如:
http://myhost.com/javascript.php
如果有人将其包含在他的HTML中?
更确切地说:如果客户端直接通过URL或HTML源代码下的SCRIPT请求请求客户端,是否会收到一个标头服务器?
答案 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文件,因为每次都会调用不同的参数。