在本次實驗中,咱們實現了一個小的web程序,包括前端的設計,後臺的設計,數據庫的鏈接等,這些在上學期的web編程設計課上也學習了。實驗中,咱們又測試了使用sql語句的注入,實現不合法用戶的成功登錄和數據庫信息的惡意添加,可是可以實現這些注入,重點的仍是看本身寫的代碼是否有漏洞,就像在後面的實驗步驟裏我所講的同樣(以老師指導上的php代碼爲例),若是利用永真式來達到非法登錄,在最初始使用的php代碼是能夠實現的,但若是咱們將判斷合法用戶的條件改成=1,則大大的減少了非法用戶登錄的可能性(利用永真式的話),但這只是大大的,並非不可能,因此咱們還能夠修改php中sql語句的設計,不讓sql語句同前端用戶輸入的信息有關聯,就更能夠減小sql語句的注入了,因此說,代碼的完整度越高、考慮得越全面,可以捕捉到的代碼漏洞也就越少,安全問題也就越能夠儘可能多的避免。
配置apache2端口爲8087
php
開啓apache2,查看當前開啓端口運行狀況
css
打開瀏覽器輸入127.0.0.1:8087,肯定是否成功打開apache(此處因上次實驗而把本機地址網站頁面copy成新浪首頁)
html
在/var/www/html下新建文件,測試是否能在瀏覽器中成功打開
前端
繼續在同一目錄下編寫html主頁,如圖
java
在瀏覽器中打開HTML
python
點擊Login GET,發如今URL欄中能夠看出傳送的明文密碼與用戶名
mysql
點擊Login POST,發如今URL欄已不能夠看出明文密碼與用戶名
web
在html主頁的基礎上,使用javascipt對頭部分添加判斷密碼框輸入字符是否大於5個
sql
在瀏覽器中打開更新後的主頁,輸入密碼字符數小於5,提交,出現如圖框
數據庫
啓動mysql後,使用原用戶名密碼進行登陸,進入命令行式的mysql界面,建立新用戶
建立新的數據庫,並在新數據庫裏建立一張新表
在新表中添加2條信息後,如圖展現現表的內容
編寫可以鏈接mysql數據庫中剛創建的那種新表,且能夠判斷是否爲合法用戶的php代碼(這裏使用的是老師指導上的php代碼)
使用已存在的用戶名密碼進行登陸(這裏都是使用的GET模塊登陸)
使用錯誤密碼登陸
輸入如圖顯示的用戶名,便可登錄成功(但這與所寫的php代碼有關,這裏之因此能夠成功是由於判斷是不是合法用戶,是直接用sql語句尋找是否有符合條件的,而後依據返回的行是否大於0,大於0則成功)
若是咱們改動一下php代碼,sql語句不變,將判斷條件該爲返回的行是否等於1(由於若是真的在用戶表中能夠找到符合條件的用戶與密碼,那麼返回的行數必定爲1,而若是是像上圖輸入用戶名,則sql語句執行之後的結果是用戶表裏的總行數,只要用戶表裏的註冊用戶不是隻有1位,那麼這種sql注入就會成爲無效的)
固然,上面改動的php並不徹底保險,畢竟萬一用戶表中就是隻有1個用戶呢?因此咱們還能夠改代碼,將sql語句改變一下,變成select用戶表中的全部信息,在判斷條件上變成對select所獲得的信息進行索引判斷是否有用戶名與密碼同時對應的,有的話則返回登陸成功,無的話則登陸失敗
使用insert語句輸入用戶名框,方法同單句sql同樣,將username變爲空,註釋掉密碼判斷條件(但這裏一樣須要更改下php代碼,由於多句注入要使用multi_query才能夠)
打開mysql中php鏈接使用的用戶表,發現確實成功添加了新用戶
咱們能夠將php代碼簡單改下,還原成之前的php,即將multi_query改成之前的query,成功!