首頁 >後端開發 >php教程 >php中突破基於HTTP_REFERER的防盜鏈措施stream_context_create

php中突破基於HTTP_REFERER的防盜鏈措施stream_context_create

WBOY
WBOY原創
2016-07-29 08:44:40876瀏覽

那如果考慮突破防盜鏈的措施,就需要考慮在 HTTP_REFERER 上面做手腳了。 PHP 腳本中對應的變數是 $_SERVER['HTTP_REFERER'] ,它儲存了 HTTP_REFERER 的值。
由於直接存取目標 URL 資源已經被上述防盜鏈的措施所屏蔽,所以我們需要個類似網關的玩意去獲取。說穿了就是寫已經包裝過的 HTTP 頭的 PHP 腳本。
以下是簡單的函數實作:

複製程式碼 程式碼如下:


function getRemoteFile(>

function getRemoteFile($url, $refer = '') {
$option = array(
'http' => array(
'header' => "Referer:$refer")
);
$context = stream_context_create ($option);
return file_get_contents($url, false, $context);

}

這是比較簡單的函數,其功能就是偽造Referer (使用stream_context_create 函數)接著取得對方的資料(使用file_get_contents,需要開啟allow_url_fopen )。

如果想「複雜」一點,可以使用 sockets 擴展,這不在這裡的討論範圍以內。

另外,再提供一個取得主機名稱的正規函數複製程式碼

程式碼如下:



程式碼如下:


function getHost($url) {
$result = preg_match('/^http://([d|w|.]+)//', $url, $matches);
if (sizeof($ matches) >= 2) {

return $matches[1];
} else {
return null; }

}

再進一步的擴展,可以封裝成腳本,然後譬如調用http://127.0.0.1/proxy.php?url=http://i.am/img就可以獲得那些開啟防盜鏈措施的連結了(再發揮下,使用Javascript 將圖片連結全部替換)。 以上就介紹了 php中突破基於HTTP_REFERER的防盜鏈措施stream_context_create,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn