濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > 詳解php偽造Referer請(qǐng)求反盜鏈資源

詳解php偽造Referer請(qǐng)求反盜鏈資源

熱門標(biāo)簽:蘇州外呼系統(tǒng)有效果嗎 地圖標(biāo)注怎么做商戶驗(yàn)證 打開百度地圖標(biāo)注 智能電銷語(yǔ)音機(jī)器人資訊 亳州企業(yè)外呼系統(tǒng) 山東電銷卡外呼系統(tǒng)原理是什么 海南外呼系統(tǒng)方案 兼職做地圖標(biāo)注好賺錢嗎 400 電話 辦理

有些產(chǎn)品為了防止自己的產(chǎn)品被盜鏈訪問(wèn),會(huì)采用反盜鏈措施,如封閉型生態(tài)的音樂網(wǎng)站和視頻網(wǎng)站,他們已經(jīng)為了版權(quán)付費(fèi),自然不希望你免費(fèi)使用他們的資源。但因?yàn)楹芏嗳藢iT研究盜鏈,因此我們也需要了解下盜鏈、反盜鏈和逃避反盜鏈的原理。

盜鏈

引用百度百科對(duì)盜鏈的定義:

盜鏈?zhǔn)侵阜?wù)提供商自己不提供服務(wù)的內(nèi)容,通過(guò)技術(shù)手段繞過(guò)其它有利益的最終用戶界面(如廣告),直接在自己的網(wǎng)站上向最終用戶提供其它服務(wù)提供商的服務(wù)內(nèi)容,騙取最終用戶的瀏覽和點(diǎn)擊率。受益者不提供資源或提供很少的資源,而真正的服務(wù)提供商卻得不到任何的收益。

常規(guī)盜鏈

我們知道,網(wǎng)站提供服務(wù)是向服務(wù)端請(qǐng)求一個(gè) html 文件,這個(gè)文件中包含有 css/js 文件,也包含 img/video 標(biāo)簽,這些靜態(tài)資源會(huì)在 html 文件加載時(shí),依次的發(fā)起請(qǐng)求并填充在指定位置上,從而完成整個(gè)頁(yè)面的加載。

因此只要拿到這個(gè)圖片的 URL 并嵌入我們自己的 html 文件中,就能在我們的網(wǎng)站上訪問(wèn),由于資源是不同的 HTTP 請(qǐng)求獨(dú)立訪問(wèn)的,因此我們也能過(guò)濾源站的 html 文件。這就是最簡(jiǎn)單的盜鏈。

危害:在用戶訪問(wèn)時(shí),并沒有在訪問(wèn)被盜鏈網(wǎng)站,但是依然會(huì)占用該網(wǎng)站的帶寬資源,而帶寬是要給運(yùn)營(yíng)商付費(fèi)的。同時(shí),該網(wǎng)站的廣告、周邊、宣傳等資源并不會(huì)被用戶訪問(wèn)到。

分布式盜鏈

分布式盜鏈比較復(fù)雜,需要在服務(wù)端部署專門的程序,并不針對(duì)單個(gè)網(wǎng)站或單個(gè) url ,而是對(duì)全網(wǎng)的所有有用的資源進(jìn)行盜取,并存儲(chǔ)在自己的數(shù)據(jù)庫(kù)中,并在用戶實(shí)際訪問(wèn)時(shí),完全轉(zhuǎn)換為自己的流量。

危害:自己通過(guò)勞動(dòng)、金錢、版權(quán)付費(fèi)得到的資源,被盜鏈網(wǎng)站免費(fèi)使用,如網(wǎng)店攝影圖、期刊、電視劇等。并因此導(dǎo)致自己的會(huì)員、服務(wù)無(wú)法實(shí)現(xiàn)盈利。

反盜鏈分類

我們了解了盜鏈對(duì)源站的危害后,自然要通過(guò)一些手段來(lái)阻止這種行為維護(hù)自己的利益。

加水印

這是最簡(jiǎn)單的方法,通過(guò)后端程序批量對(duì)圖片等資源加上水印,這樣在盜鏈的同時(shí),也在為自己的網(wǎng)站做宣傳,有時(shí)甚至?xí)鲃?dòng)尋求這種盜鏈。

資源重命名

因?yàn)楸I鏈?zhǔn)峭ㄟ^(guò)指定的url,這個(gè) url 中一定包含該資源的路徑和名稱,因此通過(guò)不定期的更改文件或目錄的名稱,能夠快速避免盜鏈,但也會(huì)導(dǎo)致正在下載的資源被中斷。

限制引用頁(yè)

http 請(qǐng)求的頭部信息中,有一個(gè)字段: referer ,它代表這個(gè)請(qǐng)求是從哪個(gè)頁(yè)面發(fā)起的,如果是單獨(dú)在頁(yè)面中打開或者服務(wù)端請(qǐng)求的,則這個(gè)字段為空。因此我們可以通過(guò) referer 這個(gè)字段的值做限制,如果是自己認(rèn)可的頁(yè)面,則返回資源,否則,禁止該請(qǐng)求。但是由于每次都要打開一個(gè)白名單的文件做 url 匹配,因此會(huì)降低性能。

加密認(rèn)證

在客戶端通過(guò)將用戶認(rèn)證的信息和資源的名稱進(jìn)行組合后加密,將加密的字符串作為 url 的參數(shù)發(fā)起請(qǐng)求,在服務(wù)端進(jìn)行解密并認(rèn)證通過(guò)后,才會(huì)返回請(qǐng)求的資源。這個(gè)方式主要用于防范分布式盜鏈。

反盜鏈程序

上面的3種反盜鏈方式,我們常用的是第三種,通過(guò) referer 屬性來(lái)完成反盜鏈,今天也主要分享這一種方法的反盜鏈與防反盜鏈。

后端程序限制

這種限制需要消耗服務(wù)端計(jì)算資源,因此不如 Nginx 限制常用。

$from = parse_url($_SERVER['HTTP_REFERER']);
if ($from['host']!='xxx.com'  $from['host']!='www.xxx.com') {
  die('你丫在盜鏈');
}

Nginx 限制

通過(guò)修改 nginx 配置文件可以做到,修改完成后記得重啟 nginx

// 這里指定需要防盜鏈的資源,如gif/jpg等
location ~* \.(gif|jpg|png|jpeg)$ {
  // 設(shè)置資源的過(guò)期時(shí)間
  expires 30d;
  // 設(shè)置合法的引用頁(yè),也就是防盜鏈的白名單;
  // none blocked保證用戶在新頁(yè)面打開時(shí)依然能夠打開,如果不希望用戶能夠保存刪掉這兩項(xiàng)
  valid_referers none blocked *.hugao8.com *.baidu.com *.google.com;
  // 對(duì)于非法的引用頁(yè),可以重寫圖片,也可以直接返回403或404頁(yè)面
  if ($invalid_referer) {
    rewrite ^/http://www.it300.com/static/images/404.jpg;
    #return 404;
  }
}

Referer-Policy

Referer 首部包含了當(dāng)前請(qǐng)求頁(yè)面的來(lái)源頁(yè)面的地址,即表示當(dāng)前頁(yè)面是通過(guò)此來(lái)源頁(yè)面里的鏈接進(jìn)入的。服務(wù)端一般使用 Referer 首部識(shí)別訪問(wèn)來(lái)源,可能會(huì)以此進(jìn)行統(tǒng)計(jì)分析、日志記錄以及緩存優(yōu)化等。

Referer 屬性出現(xiàn)在請(qǐng)求頭中,也在請(qǐng)求頭中被設(shè)置,但是在瀏覽器的安全策略里,該值無(wú)法被 js 所指定:

$.ajax({
    url: 'http://www.baidu.com',
    beforeSend(xhr) {
      // 在發(fā)送ajax請(qǐng)求前設(shè)置header頭部
      xhr.setRequestHeader("Referer", "http://translate.google.com/");
      xhr.setRequestHeader("User-Agent", "stagefright/1.2 (Linux;Android 5.0)");
    },
    success(data) {
      console.log(data);
    },
    error(err) {
      console.log(err);
    }
});

然而瀏覽器會(huì)報(bào)錯(cuò):

那么 Referer 是怎么被自動(dòng)設(shè)置的呢?這個(gè)得看 Referer-Policy屬性 是怎么定義的:

  • no-referrer : 整個(gè) Referer 首部會(huì)被移除。訪問(wèn)來(lái)源信息不隨著請(qǐng)求一起發(fā)送。
  • no-referrer-when-downgrade (默認(rèn)值): 在沒有指定任何策略的情況下用戶代理的默認(rèn)行為。在同等安全級(jí)別的情況下,引用頁(yè)面的地址會(huì)被發(fā)送(HTTPS->HTTPS),但是在降級(jí)的情況下不會(huì)被發(fā)送 (HTTPS->HTTP)。
  • origin : 在任何情況下,僅發(fā)送文件的源作為引用地址。例如 https://example.com/page.html 會(huì)將 https://example.com/ 作為引用地址。
  • origin-when-cross-origin : 對(duì)于同源的請(qǐng)求,會(huì)發(fā)送完整的URL作為引用地址,但是對(duì)于非同源請(qǐng)求僅發(fā)送文件的源。
  • same-origin : 對(duì)于同源的請(qǐng)求會(huì)發(fā)送引用地址,但是對(duì)于非同源請(qǐng)求則不發(fā)送引用地址信息。
  • strict-origin : 在同等安全級(jí)別的情況下,發(fā)送文件的源作為引用地址(HTTPS->HTTPS),但是在降級(jí)的情況下不會(huì)發(fā)送 (HTTPS->HTTP)。
  • strict-origin-when-cross-origin : 對(duì)于同源的請(qǐng)求,會(huì)發(fā)送完整的URL作為引用地址;在同等安全級(jí)別的情況下,發(fā)送文件的源作為引用地址(HTTPS->HTTPS);在降級(jí)的情況下不發(fā)送此首部 (HTTPS->HTTP)。
  • unsafe-url : 無(wú)論是同源請(qǐng)求還是非同源請(qǐng)求,都發(fā)送完整的 URL(移除參數(shù)信息之后)作為引用地址。

這個(gè)值可以通過(guò)三種方式來(lái)設(shè)置:

meta name="referrer" content="origin">
a  rel="external nofollow" rel="external nofollow" referrerpolicy="origin">
a  rel="external nofollow" rel="external nofollow" rel="noreferrer">

防反盜鏈

前端 JS 不能在頭部設(shè)置 Referer 字段,和跨域一樣是因?yàn)闉g覽器的安全策略,那么同樣的在服務(wù)端進(jìn)行請(qǐng)求就不會(huì)有這些限制,我們?cè)诜?wù)端請(qǐng)求時(shí)就可以自由的修改 Referer 字段。

我們通過(guò)簡(jiǎn)單的 PHP 例子來(lái)完成這個(gè)功能:

?php
$url = 'http://t11.baidu.com/it/u=3008889497,862090385fm=77';
$refer = 'https://www.baidu.com';
$ch = curl_init();
//以u(píng)rl的形式 進(jìn)行請(qǐng)求
curl_setopt($ch, CURLOPT_URL, $url);
//以文件流的形式 進(jìn)行返回 不直接輸出到瀏覽器
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//瀏覽器發(fā)起請(qǐng)求 超時(shí)設(shè)置
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
//偽造來(lái)源地址 
curl_setopt ($ch, CURLOPT_REFERER, $refer);
$file = curl_exec($ch);
curl_close($ch);
header('Content-Type: text/html');
// 對(duì)圖片進(jìn)行base64編碼,然后返回給前端展示
$file = base64_encode($file);
echo "img src='data:image/jpeg;base64,{$file}' />";
?>

我們第一次請(qǐng)求注釋了 偽造來(lái)源地址 這一行,第二次請(qǐng)求不注釋這一行,這樣可以驗(yàn)證執(zhí)行結(jié)果:

總結(jié)

盜鏈和反盜鏈?zhǔn)且粋€(gè)對(duì)立面,技術(shù)不斷升級(jí),最終的目標(biāo)也是為了開放資源和保護(hù)知識(shí)產(chǎn)權(quán)。在互聯(lián)網(wǎng)生態(tài)里,我們通過(guò)反盜鏈保護(hù)我們的利益,也使用防反盜鏈的這種方式來(lái)擴(kuò)大我們的內(nèi)容,無(wú)論站在哪一方,都需要做到知己知彼。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • php 偽造HTTP_REFERER頁(yè)面URL來(lái)源的三種方法
  • PHP偽造來(lái)源HTTP_REFERER的方法實(shí)例詳解
  • php中HTTP_REFERER函數(shù)用法實(shí)例
  • 使用php偽造referer的方法 利用referer防止圖片盜鏈
  • PHP利用REFERER根居訪問(wèn)來(lái)地址進(jìn)行頁(yè)面跳轉(zhuǎn)
  • php中XMLHttpRequest(Ajax)不能設(shè)置自定義的Referer的解決方法
  • php中突破基于HTTP_REFERER的防盜鏈措施(stream_context_create)
  • php獲取referer防非法訪問(wèn)

標(biāo)簽:溫州 安康 綏化 呼倫貝爾 萊蕪 清遠(yuǎn) 紹興 金華

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《詳解php偽造Referer請(qǐng)求反盜鏈資源》,本文關(guān)鍵詞  詳解,php,偽造,Referer,請(qǐng)求,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《詳解php偽造Referer請(qǐng)求反盜鏈資源》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于詳解php偽造Referer請(qǐng)求反盜鏈資源的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    沅陵县| 轮台县| 义马市| 永和县| 屏东市| 金坛市| 江都市| 博湖县| 涟源市| 襄垣县| 浦县| 垦利县| 河间市| 遂平县| 怀宁县| 新龙县| 阿克| 龙江县| 澄迈县| 铁岭县| 海宁市| 天水市| 朝阳县| 青岛市| 虎林市| 洪洞县| 友谊县| 青浦区| 高清| 五原县| 新巴尔虎左旗| 香格里拉县| 黑山县| 新闻| 辰溪县| 栾川县| 九龙城区| 天峨县| 宁强县| 博兴县| 若尔盖县|