簡體   English   中英

防止跨域包含在PHP中

[英]Prevent cross-domain include in PHP

我想這個問題已經被問到了,但是我找不到,所以對最后的重復很抱歉。 我只發現相反的情況。

如何防止跨域包含在PHP中? $_SERVER["HTTP_REFERER"]preg_match是否足夠? 我的猜測不是。 為了防止這種情況, php.ini上的選項是什么?

謝謝。

這已經是不可能的,因此您不必擔心。 PHP包含的源代碼無法通過HTTP處理。 僅當它們在同一服務器上時,才可以包括它們。 沒有人可以僅使用其URL將PHP源文件包含在其網站中。 這兩個腳本必須在同一服務器上

如果通過HTTP包含PHP源文件,則包含方將僅看到PHP文件生成的輸出,而不是其源代碼。

實際上,即使您自己也無法使用HTTP include() PHP源文件,即使兩個文件都在同一服務器上。 任何通過HTTP正常運行且已啟用PHP的Web服務器的任何操作都不會將源代碼發送到客戶端。

例:

假設您有一個example.com網站,並且位於index.php並且必須包含位於同一目錄中的sources.php 如果你試試

include("sources.php");  //or "/path/to/your/root/sources.php"

這將按預期工作,並將包含源代碼。 但是如果你嘗試

include("http://www.example.com/sources.php");

即使您同時擁有這兩個文件,它們也不會包含來自sources.php任何源代碼到您的index.php ,即使它們都在同一服務器上。 這是因為當通過HTTP提供服務時,代碼已被處理,並且正確配置的啟用php的網絡服務器將不會發送php源代碼。

您不能阻止人們下載您的HTTP資源並隨意使用它們。 (請注意,它們只能包含程序的輸出 ,而不能包含PHP源代碼)。

您可以設置障礙(例如檢查HTTP請求中的用戶代理字符串),但是它們很容易被繞開。

php.ini沒有設置可以防止這種情況。 它可以讓你用來禁止包括通過HTTP內容服務器上運行腳本的能力,但沒有被包括在內。

暫無
暫無

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

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