主要是沒有對登錄密碼的字串進行引數化和過濾,所以導致網站可以直接用“萬能密碼”進行突破登錄
僅供學習交流
- 這是某同學做的網站,今天無聊打開了,并幫他進行測驗一下

看到這個后臺,感覺做的還是不錯的,首先SQL注入一般這種“萬能密碼”在99%的網站都是沒有用的了,因為幾乎所有發布到網路上的網站都是有進行安全考慮的,像這種學生的學術作品的話,一般不會考慮那么多,所以直接使用萬能密碼進行登錄后臺
萬能密碼:'or 1=1--
用戶名隨便輸入,密碼填寫這個,輸入驗證碼,ok,大功告成


直接就登錄成功了,不論他設定的是什么密碼,都可以直接登錄進去
- 那么這是為什么呢?
一般沒有進行SQL陳述句引數化的登錄陳述句是這樣的
Select * From 用戶表 Where UserName=xxx and Password=xxx
然后判斷回傳的行數,如果有回傳行,證明賬號和密碼是正確的,即登錄成功,而這樣的陳述句的話,就很容易被注入代碼,也就是在登陸的SQL陳述句中添加一段代碼,例如直接在密碼框輸入【’or 1=1–】,那么它的登錄陳述句就會變成
Select * From 用戶表 Where UserName=xxx and Password=xxx or 1=1--
or是或者的意思,也就是Password=xxx的時候可以登錄,也可以是1=1的時候可以登錄,要知道,1永遠等于1,所以登錄條件永遠成立,所以永遠可以登錄,
而將SQL陳述句進行分解引數化,就可以很好的解決這個問題,用到SQL的地方,盡量都將SQL進行引數化和符號過濾,
原文自:熊沐風同學
原文地址:http://www.zejang.cn/archives/90
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/190937.html
標籤:java
