2011-05-27 54 views
2

我有一個劇本,叫javascript.php,女巫我包括我的腳本標記在我的HTML,像這樣:服務器頭,引薦等

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

我想知道什麼,有沒有可能在javascript.php下檢查是否有人直接訪問它,如:

http://myhost.com/javascript.php 

如果有人把它包含在他的HTML中?

更確切地說:如果他直接通過URL或通過HTML源代碼中的SCRIPT請求請求,服務器是否會收到來自客戶端的頭文件?

+1

不要打擾。 Firebug會輕易擊敗。 – SLaks 2011-05-27 11:57:16

回答

3

不,不會有任何保證。

+2

他是對的。有一個引用標題,但它可以很容易地操作。 – ZoolWay 2011-05-27 11:57:24

+0

我需要知道它是否包含在HTML中的腳本中,或者它是直接訪問的,沒有更多:) – metaforce 2011-05-27 11:58:48

+0

什麼是最終遊戲? – 2011-05-27 12:14:57

1
 
$_SERVER['HTTP_REFERER'] 

但從這意味着他們可以發送任何用戶代理這派,他們希望

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文件不會被瀏覽器緩存,因爲它會每次調用不同的參數。