題記:
- 馬上就要招聘了,所以我打算放置簡歷在自己的網頁上,但是又不想給除了招聘的人,或者我指定的人外看,所以我需要對網頁頁面加密
- 我找了許多資料,查看了許多所謂的頁面加密,但是有60%左右都是網頁鎖,采用第三方插件,而且只能在某個游覽器某個賬號下才能實現
- so,我只能自己研究解決了,這個時候有人給我百度網盤分享一個文件,是需要輸入密碼的,於是我發現這個就是我需要的,於是我開始研究百度網盤私密分享的原理
簡易分析百度網盤:
1、先將所有cookie清空,賬號取消登錄
2、打開chrome,輸入分享的鏈接,在跳轉鏈接之前,打開開發者選項,監控文件變化
3、敲擊回車,發現url鏈接發生變化
4、url從 /s/1L... 變為 /share/init?surl=Lrw...
5、這時候看network中加載的文件變成302狀態
6、302代表重定向,意思是原來URL重定向至新的地址,也就是說,百度網盤服務器那邊判斷你這個分享鏈接沒有輸入過密碼,也就沒存儲cookie,所以原本訪問的頁面被重定向至新的密碼頁
7、這時候我們輸入正確密碼,重新加載分享鏈接,發現返回正確的html,和200狀態
8、並且會發現cookie中存入很多內容,並且頁面在訪問后端時,會自動攜帶cookie(最近一段時間我一直在用localstorage,所以忘了cookie,可以自動攜帶)
所以通過上分析,發現主要存於cookie內容中,實現的加密訪問
下面就是我寫的加密網頁原理(我使用的是nodejs,ejs模板,express),因為后端可以用好多種去寫,這里只寫思路,不寫具體代碼
前期准備工作,必須有個加密路徑的數據表
id | path | password | plaintext | random_code | time |
一般為uuid | 請求的路徑,根據自己喜好寫,我的就是 /a.html | sha256加密,字符串為明文密碼連接上id和隨機碼 | 明文密碼不進行單向加密 | 隨機碼隨機的一組大小寫字母加數字 | 創建時間 |
1、當人們訪問a.html,也就是加密不想讓訪問的頁面,因為頁面會自動攜帶cookie
2、所以我們在后端拿到cookie,和請求路徑時,然后進行數據庫對比,這里有個問題,如果只有HTML加密,則先判斷下請求的是html還是其他的,可以減少查詢
3、如果在表中找到這個請求路徑,則查看cookie中是否有id=password這個數據,有的話就直接返回請求的html文件
4、如果不存在數據,則返回渲染的輸入密碼的html,自己想辦法把原來路徑放入輸入密碼html,輸入正確密碼后好跳轉
5、輸入密碼,ajax請求,通過輸入的明文密碼,以及id和數據庫中的隨機碼,變為字符串連接起來,和password比較,或者直接比較明文密碼是否相同
6、一旦正確,為了安全起見,返回加密后的password,也就是密文
7、在密碼html的js中,將得到的密文和id存入cookie中,跳轉到原來訪問的頁面
8、這個時候有cookie了,然后對比成功,返回a.html文件
以上只是我的初期測試寫法,也許有更好的,和更優化的方法,歡迎指正
本文可以隨意轉載分享,但是請標明出處
下面為測試圖片