簡體   English   中英

防止直接訪問將在另一台服務器中加載的 php 文件

[英]Prevent direct access to a php file that would be loaded in another server

我有這個文件 style.php 將用作幾個域的主要 css 樣式。 此 style.php 文件將在“網站 1”上可用,而其余網站將從網站 1 加載它。

對於網站 1。

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title> Website one </title>
    <link rel="stylesheet" href="style.php">
</head>
<body>


</body>

對於網站 2。

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title> Website one </title>
    <link rel="stylesheet" href="https://website1.com/style.php">
</head>
<body>


</body>

對於網站 3。

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title> Website one </title>
    <link rel="stylesheet" href="https://website1.com/style.php">
</head>
<body>


</body>

其他幾個網站也是如此。

現在這是我想做的事情,我不想直接訪問網站 1 的 style.php。例如,如果用戶訪問https://website1.com/style.php ,他不應該可以訪問它。

這就是問題所在,當我使用 .htaccess 拒絕訪問它時,網站 2 和 3 將無法加載 css。

我可以對 style.php 進行任何可能的調整,以便當用戶訪問https://website1.com/style.php時,他將無法訪問它,但當它用作樣式表時網站2和3,它會正常加載css嗎?

最簡潔的答案是不”。

更長的答案是你對當前正在發生的事情有一個不正確的心理模型。 您想象當您從網站 2 引用樣式表時,請求以某種方式“來自”該網站。 實際發生的是這樣的:

  1. 用戶要求他們的瀏覽器加載網站 2
  2. 瀏覽器向網站2的服務器發送請求
  3. 服務器向瀏覽器返回一些 HTML,其中包括應該從網站 1 上加載樣式表的 URL
  4. 瀏覽器決定要加載樣式表,因此向網站 1 的服務器發送請求
  5. 網站 1 的服務器返回樣式
  6. 瀏覽器將樣式應用於其網站 2 的顯示

您的兩台服務器在任何時候都不會相互通信; 他們總是從瀏覽器接收請求並向瀏覽器發送響應。 如果服務器在第 5 步拒絕請求,瀏覽器將永遠不會知道樣式表包含什么,因此只會呈現沒有這些樣式的頁面。

考慮到這一點,我們可以重新提出問題:

我能否確定瀏覽器請求 URL 的原因,以區分在地址欄中鍵入 URL 的用戶與在我的一個站點上使用的樣式表。

答案可能是:瀏覽器可以發送一個名為“REFERER”的 HTTP 標頭(是的,這是“referrer”的拼寫錯誤,但很久以前它就成為標准了),它為 URL 提供了請求“來自“ 在某種意義上。 對於直接鍵入的 URL,它將始終為空; 對於樣式表 URL,它可能是包含頁面。 您可以在 PHP 中以$_SERVER['HTTP_REFERER']形式訪問它,或者在 Apache 配置中通過將RewriteCond %{HTTP_REFERER} some-pattern-to-match放在RewriteRule前面來訪問它。

但是,出於隱私原因,瀏覽器最近對在域之間傳遞引薦來源信息變得更加嚴格,因此在您的情況下它可能是空白的。

同樣重要的是要注意請求中的所有內容都在用戶的完全控制之下,並且響應中的所有內容對用戶都是完全可見的 一旦你發現這是需要的,發送帶有假 REFERER 標頭的請求是微不足道的。 在使用樣式表的站點上查看樣式表更加簡單——在大多數瀏覽器中,按 F12 將彈出“開發人員工具”,您可以在其中查看服務器發送的所有內容。

因此,如果您希望以某種方式“保密”這些樣式,那您就不走運了。 用戶需要能夠看到瀏覽器的樣式才能使用它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM