[英]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.