用Express做一個圖片簡易防盜鏈
最近做的一個主管安排的專案,給一個系統多增加一套前端模板,這個本身不難,由於演算法那邊不能提供資料,我隨便複製的網上圖片連結,發現有些圖片不能正常顯示,後來知道有些圖片加了“防盜鏈”,這讓我馬上想到了以前遇到的http請求頭中的referer屬性,這個訊息頭記錄了本網站的一些資源請求是來自哪個網站,如果利用這個referer的判斷,就可以實現過濾。
程式碼:
var express = require('express'); var app = express(); var fs = require('fs'); // 設定模板路徑,預設為./views // app.set('views', path.join('views')); app.engine('html', require('ejs').renderFile); app.set('view engine', 'html'); app.get('/public/*', function (req, res, next) { var referer = req.headers.referer; console.log(referer); if (referer && referer.indexOf('localhost1') <= 0) { try { fs.readFile("./views/no.png", function (err, data) { console.log("no"); res.writeHead(200, {"Content-type": "image/jpg"}); console.log(err); // console.log(data); res.end(data); }); } catch (err) { console.log(err); } } else { try { fs.readFile("./views/a.jpg", function (err, data) { console.log("normal"); res.writeHead(200, {"Content-type": "image/jpg"}); // console.log(data); res.end(data); }); } catch (err) { console.log(err); } } }); app.get('/', function (req, res) { res.render('index', {helloWorld: 'hello,world'}); }); app.listen(3000, function () { console.log('app listen at 3000'); });
referer是一個網站中某個資源的請求才會帶的屬性,如果是直接訪問圖片的這個地址,是不帶referer的,所以
這裡判斷的時候,先要判斷referer存在,再判斷是不是從某域發過來的請求,因為我們直接訪問地址的時候是想看到圖片結果的,只是一些網站引用我們的圖片連結時我們加以遮蔽。
還可以以中介軟體的形式:
var express = require('express'); var app = express(); var fs = require('fs'); // 設定模板路徑,預設為./views // app.set('views', path.join('views')); app.engine('html', require('ejs').renderFile); app.set('view engine', 'html'); function sss (req, res, next) { var referer = req.headers.referer; console.log(referer); // console.log(referer.indexOf('localhost3')); if (referer && referer.indexOf('localhost1') >= 0) { next(); } else { // console.log(res); console.log(1); // res.state(500).send('盜鏈圖片來自:<a href="xxxxx"></a>'); res.send('盜鏈圖片來自:<a href="xxxxx"></a>'); return false; } } app.get('/public/*', sss, function (req,res,next) { console.log(234234); try { fs.readFile("./views/a.jpg", function (err, data) { res.writeHead(200, {"Content-type": "image/jpg"}); console.log(err); // console.log(data); res.end(data); }); }catch (err) { console.log(err); } }); app.get('/', function(req, res) { console.log(10); res.render('index', { helloWorld: 'hello,world' }); }); app.listen(3000, function() { console.log('app listen at 3000'); });
當然破解這種寫法的防盜鏈也很簡單,用中間伺服器偽造訊息頭就行了。
相關推薦
用Express做一個圖片簡易防盜鏈
最近做的一個主管安排的專案,給一個系統多增加一套前端模板,這個本身不難,由於演算法那邊不能提供資料,我隨便複製的網上圖片連結,發現有些圖片不能正常顯示,後來知道有些圖片加了“防盜鏈”,這讓我馬上想到了以前遇到的http請求頭中的referer屬性,這個訊息頭記錄了本網站的一些資源請求是來自哪個網站,如果利用這
星期四、星期五、星期一—用GUI做一個簡易的交易系統
his 換行 巧克力 cal show .get ner 文本域 array 1、登錄界面 package org.eclipse.wb.swing; //登錄界面 import java.awt.BorderLayout;import java.awt.EventQue
Python日記——用Django做一個簡易的知乎日報API
現在我主要教大家如何去實戰,做一個簡易的知乎日報API 首先你要熟悉django的基本用法,會寫模型,會寫檢視函式,會配置url 1.配置字元編碼 因為我們等一下要使用中文,所以要先設好字元編碼 在settings.py裡將LANGUAGE_CODE
用WPF做一個簡易瀏覽器
微軟的WPF(Windows Presentation Foundation)是目前Windows平臺上最好用的圖形介面框架了。如果想在Windows平臺上編寫圖形介面程式,而且沒有跨平臺且效能需求比較高,而且對C#語言比較熟悉,那麼WPF就是最適合你的了。
怎麽用cookie做一個選項卡?
eight splay i++ 作用 code round tab 多網站 個性化 什麽是cookie? Cookies雖然一般都以英文名呈現,但是它還是有一個可愛的中文名“小甜餅”。Cookies是指服務器暫存放在你的電腦裏的txt格式的文本文件資料,主要用
繞過010Editor網絡驗證(用python做一個仿真http server真容易,就幾行代碼)
headers redirect 如果 table 本地 align cnn 破解版 resp 010Editor是一款非常強大的十六進制編輯器,尤其是它的模板功能在分析文件格式時相當好用!網上現在也有不少010Editor的破解版,如果沒錢或者舍不得花錢買授權的話,去官方
微信圖片反防盜鏈 不太成熟的解決方式 僅供參考
clas ava order 解決 () this mage 比較 mat $("#imgDiv img").each(function () { var img = $(this); var img_src = img.attr("src") +
用vue做一個酷炫的menu
方法 tar ges enter 導入 count https 簡單 ren 寫在前面 最近看到一個非常酷炫的menu插件,一直想把它鼓搗成vue形式,誰讓我是vue的死灰粉呢,如果這都不算愛??。??開個小玩耍,我們一起來探索黑魔法吧。觀看本教程的讀者需要
【python基礎】用字典做一個小型的查詢數據庫
import oot 字符 odin 參數錯誤 err 輸出 put 異常 例子來源於《python基礎教程》第三版,57p 該例子主要是使用字典的方式,實現一個小型的數據庫,通過查詢字典的鍵值來獲取用戶的信息。 本人修改了部分代碼。 #!/usr/bin/python3
懶人動手,用python做一個基礎翻譯重新命名器(破解百度翻譯反爬手段)
想法: 在做開發的時候,經常需要命名各種變數,方法/函式,類,包,庫等。 走一遍流程就是:想好要起的名字,比如“非常帥氣”; 然後上翻譯網站,比如百度翻譯,有道翻譯; 將中文輸入並讓其翻譯成英文,此時就得出一個“very handsome”的單詞; 根據駝峰命名法,我們最後需要得
簡單的做一個圖片上傳預覽(web前端)
chrom 預覽 web前端 console fine 分享圖片 fire title right 轉載:點擊查看原文 在做web項目很多的時候圖片都是避免不了的,所以操作圖片就成了一個相對比較棘手的問題,其實也不是說很麻煩,只是說上傳然後直接預覽的過
用 Vue 做一個簡單的購物app
有意思 應用程序 其中 ins com 簡單的 node.js 引入 大神 前言 最近在學習Vue的使用。看了官方文檔之後,感覺挺有意思的。於是著手做了一個簡單的購物app。這是我第一次在這個網站上寫分享,如有不當之處,請多多指教。 一整個項目寫下來,最大的感覺就是組件式開
用java做一個簡單的打字遊戲
Java也是可以做桌面程式的。只不過需要執行在裝有JDK的電腦環境上,所以應用不是很廣泛,但是用來提高自身的程式碼邏輯還是可以的!偶有一天看到金山的打字通,就想起何不做個簡單的打字遊戲用來練練手。於是就有了下文 首先建一個類MyTyping,只有main方法 執行main方法
用HTML5做一個個人網站,此文僅展示個人主頁介面。內附原始碼下載地址
html5 ,用css去修飾自己的個人主頁 程式碼如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio
用列表做一個登入系統 功能實現:註冊與登入系統
list1=[]# 儲存使用者名稱 list2=[] #儲存密碼 while True: print('歡迎來到登入頁面') print('1:登入\n2:註冊\n3:退出') xz = int(input('請選擇:')) if xz ==
發現電腦上還裝著liteide,就用golang做一個TCP通訊測試
1、參考https://www.cnblogs.com/yin5th/p/9274495.html server端 main.go package main import ( "fmt" "net" ) func main() { // simple t
[Python] 用python做一個遊戲輔助指令碼,完整思路
一、說明 簡述:本文將以4399小遊戲《寵物連連看經典版2》作為測試案例,通過識別小圖示,模擬滑鼠點選,快速完成配對。對於有興趣學習遊戲指令碼的同學有一定的幫助。 執行環境:Win10/Python3.5。 主要模組:win32gui(識別視窗、視窗置頂等操作)、PIL(螢幕截圖)、nump
用OpenPose做一個運動量測量器
通過openpose獲得肢體關鍵點的位置資訊,利用脖子位置作為中心點求得相對位置,然後用左肩到右肩距離進行歸一化,將經過上述處理後的位置作為輸出。利用攝像頭獲得每一幀的上述輸出,相減得到各個關節的移
用Java做一個及時翻譯工具
平時看英文文件或者查詢資料的時候,遇到了不懂的單詞,就要去百度,然後就會很麻煩。於是就想到用Java寫一個及時翻譯的小工具!預期的實現效果: 雙擊選中一個單詞,按下Ctrl+C進行復制 然後馬上顯示出對應單詞的中文翻譯首先基本思路是這樣的: 首先獲取系統剪下板的
用java做一個簡單的萬年曆
一個簡單的萬年曆製作 簡單介紹萬年曆的各功能實現: 1.首先鍵盤輸入查詢的年份和月份 Scanner sc = new Scanner(System.in); System.ou