20145325張梓靖 《網絡對抗技術》 Web基礎

20145325張梓靖 《網絡對抗技術》 Web基礎

  

實驗內容

  • 開啓apahce,設計web前端HTML
  • 設計web前端javascipt
  • 設計web後端mysql
  • 設計web後端php
  • 單句sql注入攻擊
  • 多句sql注入攻擊

基礎問題回答

  1. 什麼是表單
    在網頁設計中,html裏的一個包含表單元素的區域,容許用戶在表單中輸入內容並可蒐集不一樣類型的用戶輸入,經過submit可將數據傳送到後臺進行處理
  2. 瀏覽器能夠解析運行什麼語言
    任何的腳本語言,例如php、python、JSP,javascipt。設計網頁使用的HTML,css
  3. WebServer支持哪些動態語言
    通常使用JSP,PHP語言

實驗總結與體會

在本次實驗中,咱們實現了一個小的web程序,包括前端的設計,後臺的設計,數據庫的鏈接等,這些在上學期的web編程設計課上也學習了。實驗中,咱們又測試了使用sql語句的注入,實現不合法用戶的成功登錄和數據庫信息的惡意添加,可是可以實現這些注入,重點的仍是看本身寫的代碼是否有漏洞,就像在後面的實驗步驟裏我所講的同樣(以老師指導上的php代碼爲例),若是利用永真式來達到非法登錄,在最初始使用的php代碼是能夠實現的,但若是咱們將判斷合法用戶的條件改成=1,則大大的減少了非法用戶登錄的可能性(利用永真式的話),但這只是大大的,並非不可能,因此咱們還能夠修改php中sql語句的設計,不讓sql語句同前端用戶輸入的信息有關聯,就更能夠減小sql語句的注入了,因此說,代碼的完整度越高、考慮得越全面,可以捕捉到的代碼漏洞也就越少,安全問題也就越能夠儘可能多的避免。

實踐過程記錄

開啓apahce,設計web前端HTML

  • 配置apache2端口爲8087
    php

  • 開啓apache2,查看當前開啓端口運行狀況
    css

  • 打開瀏覽器輸入127.0.0.1:8087,肯定是否成功打開apache(此處因上次實驗而把本機地址網站頁面copy成新浪首頁)
    html

  • 在/var/www/html下新建文件,測試是否能在瀏覽器中成功打開
    前端

  • 繼續在同一目錄下編寫html主頁,如圖
    java

  • 編寫該HTML簡單的對應PHP
  • 在瀏覽器中打開HTML
    python

  • 點擊Login GET,發如今URL欄中能夠看出傳送的明文密碼與用戶名
    mysql

  • 點擊Login POST,發如今URL欄已不能夠看出明文密碼與用戶名
    web

設計web前端javascipt

  • 在html主頁的基礎上,使用javascipt對頭部分添加判斷密碼框輸入字符是否大於5個
    sql

  • 在瀏覽器中打開更新後的主頁,輸入密碼字符數小於5,提交,出現如圖框
    數據庫

設計web後端mysql

  • 啓動mysql後,使用原用戶名密碼進行登陸,進入命令行式的mysql界面,建立新用戶

  • 建立新的數據庫,並在新數據庫裏建立一張新表

  • 在新表中添加2條信息後,如圖展現現表的內容

設計web後端php

  • 編寫可以鏈接mysql數據庫中剛創建的那種新表,且能夠判斷是否爲合法用戶的php代碼(這裏使用的是老師指導上的php代碼)

  • 使用已存在的用戶名密碼進行登陸(這裏都是使用的GET模塊登陸)

  • 使用錯誤密碼登陸

單句sql注入攻擊

  • 輸入如圖顯示的用戶名,便可登錄成功(但這與所寫的php代碼有關,這裏之因此能夠成功是由於判斷是不是合法用戶,是直接用sql語句尋找是否有符合條件的,而後依據返回的行是否大於0,大於0則成功)

  • 若是咱們改動一下php代碼,sql語句不變,將判斷條件該爲返回的行是否等於1(由於若是真的在用戶表中能夠找到符合條件的用戶與密碼,那麼返回的行數必定爲1,而若是是像上圖輸入用戶名,則sql語句執行之後的結果是用戶表裏的總行數,只要用戶表裏的註冊用戶不是隻有1位,那麼這種sql注入就會成爲無效的)

  • 固然,上面改動的php並不徹底保險,畢竟萬一用戶表中就是隻有1個用戶呢?因此咱們還能夠改代碼,將sql語句改變一下,變成select用戶表中的全部信息,在判斷條件上變成對select所獲得的信息進行索引判斷是否有用戶名與密碼同時對應的,有的話則返回登陸成功,無的話則登陸失敗

多句sql注入攻擊

  • 使用insert語句輸入用戶名框,方法同單句sql同樣,將username變爲空,註釋掉密碼判斷條件(但這裏一樣須要更改下php代碼,由於多句注入要使用multi_query才能夠)

  • 打開mysql中php鏈接使用的用戶表,發現確實成功添加了新用戶

  • 這個時候若是不改php代碼,不管使用哪一個正確的用戶名密碼登陸都是顯示的登陸失敗,由於多條SQL使用的multi_query,若是第一條SQL命令在執行時沒有出錯,這個方法就會返回TRUE,不然將返回FALSE,而不是返回的表信息,因此返回結果不等於1,或者也能夠說是不>0,既然if的條件不成立,因此else的結果就會不斷的顯示(即登陸失敗),不管用什麼正確的用戶名密碼
  • 咱們能夠將php代碼簡單改下,還原成之前的php,即將multi_query改成之前的query,成功!

相關文章
相關標籤/搜索