20165309 《網絡對抗技術》實驗八:Web基礎

20165309 《網絡對抗技術》實驗八:Web基礎



1.基礎問題回答

(1)什麼是表單。

  • 表單在網頁中主要負責數據採集功能。一個表單有三個基本組成部分:
    • 表單標籤:這裏麪包含了處理表單數據所用CGI程序的URL以及數據提交到服務器的方法。
    • 表單域:包含了文本框、密碼框、隱藏域、多行文本框、複選框、單選框、下拉選擇框和文件上傳框等。
    • 表單按鈕:包括提交按鈕、復位按鈕和通常按鈕;用於將數據傳送到服務器上的CGI腳本或者取消輸入,還能夠用表單按鈕來控制其餘定義了處理腳本的處理工做。

(2)瀏覽器能夠解析運行什麼語言。

  • 超文本標記語言:HTML。
  • 可擴展標記語言:XML。
  • 腳本語言:ASP、PHP、Script、JavaScript、VBScript、Perl、Python、ColdFusion、Java、JSP等。

(3)WebServer支持哪些動態語言。

  • JavaScript、ASP、PHP、Ruby等腳本語言。

返回目錄javascript


2.實驗總結與體會

(1)遇到的問題與解決

  • 問題:進行簡單的SQL注入後,登陸失敗以下:
  • 解決:這是由於庫、表和字段對應沒有搞清楚,很容易認證失敗。

(2)實驗感覺

經過本次實驗,我較爲快速、系統地學到了Web的前端和後端,上學期有接觸過網頁編程,但只懂得一些表單的使用,就是一些簡單的HTML語言,如今意識到了腳本語言在網頁編程的重要做用。此次實驗和咱們的互聯網活動息息相關,天天咱們訪問的每個網頁都是代碼,針對代碼的漏洞進行攻擊,理解代碼的含義,我以爲是很是有意義的。php

返回目錄html


3.實踐過程記錄

(1)Web前端:HTML

  • 使用service apache2 start命令打開Apache服務,而後在瀏覽器輸入127.0.0.1,若是能夠打開Apache的默認網頁,則驗證開啓服務成功:
  • cd /var/www/html進入到Apache的工做目錄下,vi test1.html新建一個含有表單的html文件(咱們經常使用的登陸頁面通常就是用表單向後臺提交數據,因此能夠編寫一個簡單的登陸頁面):
<html>  
<head>  
<title>test</title>   
</head> 
<body>           
<table>  
    <form method ="POST" action="#" name="frmLogin"  >  
    <tr>  
    <td>username: </td>  
    <td><input type="text" name="username" value="Your name" size="20" maxlength="20" /></td>  
    <td> </td>  
    <td> </td>  
    </tr>  
    <tr>  
    <td>password:</td>  
    <td><input type="password" name="password" value="Your password" size="20" maxlength="20" /></td>  
    <td> </td>  
    <td> </td>  
    </tr>  
    <tr>  
    <td><input type="checkbox" name="zlogin" value="1">auto-Login</td>  
    </tr>     
    <table>  
    <tr>  
        <td><input type="submit" name="login" value="Login" /></td>  
        <td><input type="reset" name="rs" value="Reset" /></td>  
    </tr>
    </table>    
    </form> 
</table>   
</body>  
</html>
  • 在瀏覽器中輸入/var/www/html/test1.html打開網頁:
  • method屬性分Post和Get兩種,這裏的提交方法method是Post,其主要區別有如下幾方面:
    • Get用來從服務器上得到數據,而Post用來向服務器上傳遞數據。
    • Get是不安全的,由於在傳輸過程當中,數據被放在請求的URL中,而現在現有的不少服務器會將URL記錄到日誌文件中,而後存儲在某個地方,這樣就可能會泄露信息。Post的全部操做對用戶來講都是不可見的。
    • Get傳輸的數據量小,Post的傳輸量大,因此在上傳文件只能使用Post。

(2)Web前端:JavaScript

  • 咱們可使用JavaScript來編寫一個驗證用戶名、密碼的規則,直接在以前的代碼上進行修改:
<html>  
<head>  
<title>test</title>   
</head> 
<body>           
<table>  
    <form method ="POST" action="login.php" name="frmLogin"  >  
    <tr>  
    <td>user</td>  
    <td><input type="text" name="username" value="Your name" size="20" onfocus="if (this.value=='Your name') this.value='';" /></td>  
    <td> </td>  
    <td> </td>  
    </tr>  
    <tr>  
    <td>password</td>  
<td><input type="password" name="password" value="Your password" size="20" maxlength="20" onfocus="if (this.value=='Your password') this.value='';" /></td>  
    <td> </td>  
    <td> </td>  
    </tr>  
    <tr>  
    <td><input type="checkbox" name="zlogin" value="1">auto login</td>  
    </tr>     
    <table>  
    <tr>  
        <td><input type="submit" name="login" value="login" onClick="return validateLogin()"/></td>  
        <td><input type="reset" name="rs" value="reset" /></td>  
        </tr>
    </table>    
    </form> 
</table>   

<script language="javascript">  
    function validateLogin(){  
        var sUserName = document.frmLogin.username.value ;  
        var sPassword = document.frmLogin.password.value ;    
        if ((sUserName =="") || (sUserName=="Your name")){  
        alert("user name");  
        return false ;  
        }  

        if ((sPassword =="") || (sPassword=="Your password")){  
        alert("password!");  
        return false ;  
        }  

    }   
</script>  
</body>  
</html>
  • 在瀏覽器中訪問,若是用戶郵箱或密碼未填寫就提交,網頁會報提示:

(3)Web後端:MySQL基礎

  • 開啓MySQL服務:/etc/init.d/mysql start
  • 輸入mysql -u root -p使用root權限進入,默認密碼爲password
  • 查看基本信息:show databases;
  • 輸入use mysql;,選擇mysql數據庫;輸入update user set password=PASSWORD("新密碼") where user='root';,修改密碼;輸入flush privileges;,更新權限
  • quit退出數據庫,用新密碼從新登陸,先使用create database 庫名;創建一個數據庫;使用show databases;查看存在的數據庫;使用use 庫名;使用咱們建立的數據庫:
    前端

  • 使用create table 表名 (字段設定列表);創建數據表,數據表是數據庫中一個很是重要的對象,一個數據庫中可能包含若干個數據表;使用show tables;查看存在的數據表:
  • 使用insert into 表名 values('值1','值2','值3'...);插入數據;使用select * from 表名;查詢表中的數據:
  • 在MySQL中增長新用戶,使用grant select,insert,update,delete on 數據庫.* to 用戶名@登陸主機(能夠是localhost,也能夠是遠程登陸方式的IP) identified by "密碼";指令,這句話的意思是將對某數據庫的全部表的select,insert,update,delete權限授予某IP登陸的某用戶:
  • 增長新用戶後,使用新的用戶名和密碼進行登陸:mysql -u wsj -p,登陸成功,即說明增長新用戶成功:
    java

(4)Web後端:編寫PHP網頁

PHP是一種通用開源腳本語言,語法吸取了C語言、Java和Perl的特色,主要適用於Web開發領域。它能夠比CGI或者Perl更快速地執行動態網頁。用PHP作出的動態頁面與其餘的編程語言相比,PHP是將程序嵌入到HTML文檔中去執行,執行效率比徹底生成HTML標記的CGI要高許多;PHP還能夠執行編譯後代碼,編譯能夠達到加密和優化代碼運行,使代碼運行更快。mysql

  • /var/www/html目錄下新建一個PHP測試文件phptest.php
<?php
echo ($_GET["a"]);
include($_GET["a"]);
echo "This is my php test page!<br>";
?>
  • 在瀏覽器網址欄中輸入localhost:80/phptest.php?a=/etc/passwd,可看到/etc/passwd文件的內容
  • 利用PHP和MySQL結合以前編的登陸網頁進行簡單的用戶身份認證,這裏能夠參考老師給的代碼編寫login.php,代碼以下:
<?php
$uname=$_POST["username"];
$pwd=$_POST["password"];
echo $uname;
$query_str="SELECT * FROM wsjtable where username='$uname' and password='$pwd';";
$mysqli = new mysqli("127.0.0.1", "wsj", "111111", "wsj");

/* check connection */
if ($mysqli->connect_errno) {
  printf("Connect failed: %s\n", $mysqli->connect_error);
  exit();
}
echo " connection ok!";
/* Select queries return a resultset */
if ($result = $mysqli->query($query_str)) {
  if ($result->num_rows > 0 ){
          echo "<br> {$uname}:Welcome login!! <br> ";
  }
  else {
      echo "<br> login failed!!!! <br> " ; }
  /* free result set */
  $result->close();
}
$mysqli->close();
?>
  • 瀏覽器中訪問本身的登陸界面,輸入用戶名和密碼進行認證,成功登陸以下圖所示:

(5)最簡單的SQL注入,XSS攻擊測試

SQL注入,就是經過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。具體來講,它是利用現有應用程序,將(惡意的)SQL命令注入到後臺數據庫引擎執行的能力,它能夠經過在Web表單中輸入(惡意)SQL語句獲得一個存在安全漏洞的網站上的數據庫,而不是按照設計者意圖去執行SQL語句。web

  • 訪問登陸界面,在用戶名輸入框輸入' or 1=1#,密碼任意輸入,可登陸成功:
  • 這是由於咱們輸入的用戶名和代碼中的select語句組合起來變成了select * from users where username='' or 1=1#' and password=''#至關於註釋符,把後面的內容都註釋掉;而1=1是永真式,即這個條件永遠成立,因此無論密碼是否輸入正確,都可以成功登陸。sql

    XSS攻擊:跨站腳本攻擊(Cross Site Scripting),爲不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆。故將跨站腳本攻擊縮寫爲XSS。XSS是一種常常出如今web應用中的計算機安全漏洞,它容許惡意web用戶將代碼植入到提供給其它用戶使用的頁面中。好比這些代碼包括HTML代碼和客戶端腳本。攻擊者利用XSS漏洞旁路掉訪問控制——例如同源策略(same origin policy)。這種類型的漏洞因爲被駭客用來編寫危害性更大的phishing攻擊而變得廣爲人知。對於跨站腳本攻擊,黑客界共識是:跨站腳本攻擊是新型的「緩衝區溢出攻擊」,而JavaScript是新型的「ShellCode」。數據庫

  • 將一張圖片存入/var/www/html目錄
  • 在用戶名框中輸入<img src="1.jpg" />,密碼隨意輸入,就能夠讀取到/var/www/html目錄下的圖片:
    apache

返回目錄

相關文章
相關標籤/搜索