2010-11-01 29 views
2

是否有任何標誌在PHP來確定如果我的JS/CSS被調用? 我的意思是,在php中標記如何確定正在訪問或從中調用CSS/JS?

要確定JS正在從

<script type="text/javascript" src="http://www.example.net/assets/js/jsGeneratedFrom.php"></script>

或稱從

用戶直接打到http://www.example.net/assets/js/jsGeneratedFrom.php從他們的瀏覽器的URL地址欄中。

以及CSS 從以確定是CSS從

<link type="text/css" rel="stylesheet" href="http://www.example.net/assets/css/cssGeneratedFrom.php" />

主叫用戶直接從他們的瀏覽器的URL地址欄中打http://www.example.net/assets/css/cssGeneratedFrom.php

,因爲我需要設置這些種類的CSS/JS訪問方法

所以不同的行爲,有沒有誰曾與在此之前,有一些建議任何人嗎?

在此先感謝!

+0

你說得對,我的回答沒有意義。我會考慮這個。由於它們是獨立的PHP進程,但它們不共享任何內容,所以目前我想不出任何解決方案。檢查HTTP-Referer可能工作,但不是100%可靠的。 – JAL 2010-11-01 07:00:16

+0

那麼,是啊同意你/你,使用HTTP引用應該是工作,但不是100%可靠,如你所說,因爲如果你把link,將被視爲像 AnD 2010-11-01 07:07:03

+1

你也可以在session中調用,在調用js/cssGeneratedFrom.php之前設置一個變量,然後在其中查找(並刪除它)以表示它是從頁面內調用的。 – Fanis 2010-11-01 07:14:33

回答

0

確定首先,HTTP-Referrer是查看文件被請求來源的唯一方法。正如你所看到的那樣,它不可靠,可以由客戶自動或手動設置。或者根本沒有設置,因爲客戶端設置。

此外,如果您的目標是保護文件內容,請注意不可能,因爲您最終以可讀形式將其發送給客戶端。因此,即使您將腳本包含在頁面源代碼中,也可以通過查看頁面源代碼再次閱讀。

但是,如果你需要的只是一個小技巧,你可以使用時間框架+散列。這通常用於防止訪問者請求他們不打算訪問的頁面。像通過更改URL參數打開列表的每一頁,而不點擊任何內容。

當頁面被請求時,你可以定義一個時間幀,比如說30秒,所以訪問者在請求頁面後只能在30秒內獲得腳本文件。您將結束時間作爲參數添加到腳本網址中,併爲鏈接添加哈希代碼,以便用戶不能更改結束時間。

這裏的哈希碼是一個複雜的字符串或簽名,它依賴於您想要鎖定更改的文本。這就像發送一個數字以及它的平方根一樣,所以如果訪問者改變了數字(並且不知道其他數字的目的是什麼),你可以看到數字被修改,因爲新數字的SR不匹配。

當然,你可以使用比平方根更復雜的算法,比如MD5,這很難或不可能扭轉。

所以總之;現在,腳本URL中的結束日期爲&,散列碼取決於URL(或結束日期&時間)。當您收到腳本請求時,可以將其與實時進行比較,以查看結束時間是否已經過去,如果沒有,您可以檢查哈希是否與參數匹配,因此URL中的結束時間是沒有被某人修改。如果一切正常,則發送該腳本,如果沒有,則可以發送替代內容。

但是,如果您的意圖是內容保護,請不要依賴它;沒有辦法,因爲有人可以直接看DOM並加載文件來查看它。

2

我建議看看Accept header of the request。來自link標籤(對於CSS)或script標籤(對於JS)的請求可能分別具有Accept類型的text/csstext/javascript(或application/javascript)。直接請求CSS或JS可能會有部分或全部application/xml,application/xhtml+xml,text/htmltext/plain

標題的確切內容可能是瀏覽器特定的,但您可能能夠找到一致的模式。也許與SuperDuck的技術一起使用?

或者,您可以在鏈接標記中的URL中添加查詢字符串參數,以確定請求的來源:<link type="text/css" rel="stylesheet" href="http://www.example.net/assets/css/cssGeneratedFrom.php?from=browser" />。它不會阻止誤報,但正如SuperDuck所說,無論如何,您都會將數據發送到瀏覽器,因此您無法以這種方式保護您的CSS和JS。

相關問題