因為某網站登錄頁面改版,執行了新的密碼校驗措施,禁止某些字符輸入。但是因為我原來設置密碼中有特殊字符,所以無法輸入執行登錄。
最簡單的方法當然是找回密碼,或者是請管理員重置你的用戶密碼。但因為這個網站比較簡陋,沒有找回密碼的功能,管理員也不太會操作。所以只能靠自己了。
前提:
1.因為我原來密碼肯定是沒錯的,這點首先自己得保證。
2.谷歌瀏覽器可以正常訪問網站。
步驟:
1.使用谷歌瀏覽器的開發者選項功能,調試網頁。 選擇Sources標簽,右邊有豎排調試信息控制,注意有個像錄音機暫停按鈕的鍵,點它,然后稍等片刻或者在左邊網頁渲染區鼠標晃盪晃盪,隨便點幾下,網站就暫停了,處於調試暫停模式下。這個時候網頁渲染區會出現一個像錄像機單步播放的按鈕,旁邊一個長條形的,暫時還沒有研究旁邊按鈕的作用。
2.處於調試模式暫停情況下,可以對網站登錄頁面做手腳了,不過還是趟了一些坑,具體說說:
a.elements頁面使勁點點確實可以編輯,不過只能修改部分顯示文字之類的,對head部分定義的js函數修改沒有效果,想想也能理解,也許是載入頁面時候,很多預定義函數就已經載入了,渲染之后僅僅修改element中的函數,實際上不會重新載入你修改后的elements,呵呵,很坑吧?
b.然后你想對修改后的elements保存重載?嗯…遺憾的是,確實你可以復制粘帖這些elements保存在本地電腦了,但是重載是直接從源網站獲取的,依然不會加載你修改后的網頁(事實上也加載不了,你保存的僅僅是源網站登錄頁面的一個片段而已,很多資源都沒保存,而且修改訪問這些本地文件,也基本不可能與遠程網站通訊,或者根本連接不到遠程網站服務器)
c.於是繼續在sources標簽下研究,發現了主頁的php,哈哈,這下可以編輯保存然后重載了么?遺憾的是,主頁的php是只讀的,還是那就話:如果你復制主頁的php到本地保存修改,再訪問修改后的php,基本連不上服務器(原因類似於上一條)。
d.還要繼續試下去么?嗯,因為理論上是可行的,比如人見人愛的via瀏覽器支持腳本修改頁面,比如js函數畢竟是客戶端函數,比如某安全瀏覽器可以破解某文庫的右鍵然后選擇復制。理論是可以讀取網站源代碼后在本地自動二次加工修改后再渲染並且仍然能夠與遠程網站通訊的,所以也許是我們剛剛開始谷歌瀏覽器調試的大門,太高端,還無從下手而已。
e.既然php頁面無法更改,但是我看到php頁面的代碼,調用了function.js函數庫。這個函數庫也是網頁源代碼的一部分,大部分是比較好理解的,就算是我這種不會js的人也能看個大概,畢竟我還是看python多一些,了解一些C和Java,至少有點代碼感覺。我發現里面有一個驗證密碼的函數,功能就是如果發現密碼當中如果有非法字符,return false,哈哈,你知道我要干什么了:我把這個驗證函數return false改成return true,我知道你猶豫懷疑什么,你懷疑這次保存在哪里?是的,我還是只能保存在本地。我只是希望這次重載網站php的時候谷歌瀏覽器調試器能智能一點,調取本地修改保存后的function.js函數庫,而不是調取遠程網站的。
f.這次真的如我所願了。密碼驗證函數被我修改了。再次重載php登錄遠程網站頁面的時候,密碼可以輸入曾經被判斷的非法字符。登錄成功!
補充思考:
1.谷歌瀏覽器調試網頁,修改elements中的預加載函數無法生效,且網頁重載后修改的全部重置還原。無法修改生效php原文件。
2.頁面function.js函數庫獨立文件,可以修改且save as到本地計算機,重載頁面會生效本地計算機剛剛保存的function.js,間接加工修改主頁面的功能,並且還能跟遠程網站正常通訊。
3.一個谷歌標簽頁面為一個進程調試單位,關閉后調試也就結束了,不影響其它標簽頁的調試。
4.設置break on斷點也可以起到暫停調試作用,但必須斷點生效時才能調試,很多時候斷點不生效,就得點調試頁面sources上的暫停按鍵,來暫停網頁。
5.保持運行網頁不暫停,是否可以修改保存和使生效functin.js,暫未嘗試。
6.sources標簽頁面下面有很多events,勾選可以起到斷點的效果,比較重要的一個是DOM開頭的event,可以勾選,嘗試調試。
7.調試的斷點,關閉瀏覽器后,下次重載時不會丟失,但是要打開開發者工具時才起作用。
以上純屬個人研究體會,看谷歌瀏覽器調試功能的冰山一角,錯誤之處歡迎評論指出。