未受權訪問,在平時的測試中,應該是比較容易的一個漏洞,只須要經過御劍等等軟件來進行掃描,就可能獲得一個未受權訪問漏洞。php
可是,它是什麼緣由形成的,請聽我娓(xia)娓(bi)道(bi)來。sql
如下全部代碼都是我本身寫的,可能有不美觀,代碼錯誤等等問題,但願你們能夠指正。數據庫
以下,這是一個登錄框,login.phpcookie
在平時的測試中,咱們每每能夠去嘗試直接訪問某些關鍵的文件,若是它的驗證代碼有問題,咱們將能夠直接訪問到正常狀況沒法訪問的內容session
這裏咱們直接訪問index.php頁面函數
將直接能夠訪問到咱們只有在登錄狀況下,才能訪問到的內容測試
接下來,咱們看一下代碼是如何寫的ui
PS:在正常的項目中,可能不是這樣寫的,可是這裏爲了方便你們理解,就將全部代碼都簡寫了,原理都是同樣的orm
login.phpblog
logins.php
index.php
PS:包含的fun.php爲數據庫操做函數
相信你們都能看懂這部分代碼
login.php爲登錄頁面的代碼,僅有一個form表單,在這裏咱們能夠看到,它是將內容都傳給了logins.php
logins.php內容爲接收傳過來的帳號密碼,先判斷帳號密碼是否都填寫了,而後帶入數據庫進行查詢,若是存在,設置session並返回登錄成功,並跳轉到session頁面;不然將返回登錄失敗。
接下來,主要是關注index.php文件的代碼,這裏纔是咱們形成未受權訪問的最主要的部分
這裏我將查詢時的uid默認設置爲1,方便咱們操做
這裏能夠很明顯的知道,它沒有進行任何的檢測,直接進行了sql查詢,而後就能夠在頁面中查看到內容了
由於在登錄成功的時候,設置了session,咱們這裏就能夠直接在開頭加一個判斷session值的,若是session不存在,就直接跳出,不進行sql查詢。
修改後代碼以下
此時的效果爲
就能夠防止了未受權訪問
這裏仍是要提一下,在寫代碼的時候必定要判斷session值,而不能判斷cookie,衆所周知cookie值是存放在客戶端,是能夠僞造的。
經典案例,請閱讀--》傳銷站經典案例之篡改cookie進後臺
本文由博客一文多發平臺 OpenWrite 發佈!