2018-2019-2 網絡對抗技術 20165322 Exp8 Web基礎

2018-2019-2 網絡對抗技術 20165322 Exp8 Web基礎

目錄

實驗原理

實驗內容與步驟

實驗過程當中遇到的問題

基礎問題回答

實驗總結與體會

實驗原理

  • 什麼是FORM(表單)
    • 表單至關於一個數據容器,提交表單的同時會將容器中的全部數據提交給後臺處理
  • 表單的兩種提交方法,GET和POST
    • GET - 從指定的資源請求數據,只應當用於取回數據,不該在處理敏感數據時使用
    • POST - 向指定的資源提交要被處理的數據
    GET POST
    可被緩存 不會被緩存
    保留在瀏覽器歷史記錄中 不會保留在瀏覽器歷史記錄中
    可被收藏爲書籤 不能被收藏爲書籤
    對數據有長度限制 對數據沒有長度限制
  • Javascript事件:指的是能夠出發JavaScript的條件,如點擊、劃過、選中等
  • SQL注入漏洞:指在Web應用對後臺數據庫查詢語句處理存在的安全漏洞。也就是,在輸入字符串中嵌入SQL指令,在設計程序中忽略對可能構成攻擊的特殊字符串的檢查。後臺數據庫將其認做正常SQL指令後正常執行,可能實現對後臺數據庫進行各類操做,甚至形成破壞後臺數據庫等嚴重後果。
  • XSS攻擊:就是在網站任何接受正常文本輸入的地方,輸入Javascript腳本,並讓腳本執行。
  • XSS分爲三種類型:
    • 反射型:發出請求時,XSS代碼出如今URL中,做爲輸入提交到服務器端,服務器端解析後響應,XSS隨響應內容一塊兒返回給瀏覽器,最後瀏覽器解析執行XSS代碼,這個過程就像一次發射,因此叫反射型XSS。
    • 存儲型: 存儲型XSS和反射型的XSS差異就在於,存儲型的XSS提交的代碼會存儲在服務器端(數據庫,內存,文件系統等),下次請求目標頁面時不用再提交XSS代碼。
    • DOM:不通過後端,DOM—based XSS漏洞是基於文檔對象模型Document Objeet Model,DOM)的一種漏洞,dom - xss是經過url傳入參數去控制觸發的。
    • 也就是說,用戶提交的數據中若是含有js代碼,從數據庫中讀出來的時候這段js代碼就變成了可執行的代碼。

返回目錄javascript

實驗內容與步驟

(一)Web前端HTML

  • 使用service apache2 start命令可打開Apache服務。沒有任何報錯即爲開啓成功。
    php

  • 終端輸入cd /var/www/html進入Apache目錄下,新建一個含有表單的html文件test.html
  • 這裏我參考了宏璐學姐的html,只要具備登陸界面就好啦。注意這個.html文件必定要放在Apache目錄下。html

<html>
<head>
<title>一個很普通的登陸界面</title>
<!-- Meta tag Keywords -->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!-- Meta tag Keywords -->
</head>

<body bgcolor="#FFFCEC" topmargin="100" leftmargin="325">
<!-- main -->
<!--//header-->
<h2><font size=6>Login</font></h2>
       <form action="phptest.php" method="post" name="form_login" >
           <input placeholder="your name" name="Name" class="user" type="text" onfocus="if (this.value=='Your name') this.value='';" />
           <br>
           </br>
           <input  placeholder="your password" name="Password" class="pass" type="password" onfocus="if (this.value=='Your password') this.value='';"/>
           <br>
           </br>
           <input type="submit" value="嚶嚶嚶不要點我" onClick="return validateLogin()"/>
       </form>
<!--//main-->
</body>
</html>
  • 嘗試打開html網頁:

返回目錄前端


(二)Web前端javascipt

  • 在上面的test.html基礎上,添加一段JavaScript代碼在form以後,以完成對用戶是否填寫用戶名和密碼的判斷
<script language="javascript">  
   function validateLogin(){  
       var sUserName = document.form_login.Name.value ;  
       var sPassword = document.form_login.Password.value ;    
       if ((sUserName =="") || (sUserName=="Your name")){  
       alert("user name!");  
       return false ;  
       }  

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

   }   
</script>
  • 再次進入網頁,直接點擊登陸鍵會提示輸入用戶名
    java

  • 若是沒有輸入密碼的狀況下點擊登陸鍵會提示未輸入密碼
    mysql

返回目錄web

(三)Web後端:MySQL基礎:正常安裝、啓動MySQL,建庫、建立用戶、修改密碼、建表

  • 開啓MySQL服務:/etc/init.d/mysql start
  • 輸入mysql -u root -p使用root權限進入,默認密碼爲主機root用戶的密碼
    sql

  • 查看基本信息:show databases;
    數據庫

  • 修改密碼
    • use mysql;(這裏的mysql是上一步中查詢到的數據庫名稱)
    • select user, password, host from user;(mysql庫中的user表中存儲着用戶名、密碼與權限)
    • UPDATE user SET password=PASSWORD("新密碼") WHERE user='root';
    • 更新權限:flush privileges;
    • 退出:quit;
  • 創建數據庫:create database wyj(數據庫名稱);
    • 咱們能夠再查看一下數據庫信息,能看到新建的數據庫
  • 使用上面新建立的數據庫:use wyj;
  • 創建數據庫表:create table 表名 (字段設定列表);(並設置字段基本信息)
    • create table user (Name VARCHAR(20),Password VARCHAR(20)); //其中加粗部分要和html裏的代碼對應起來,才能檢查數據表
  • 查看錶信息:show tables;
    apache

  • 插入數據:insert into 表名 values('值1','值2','值3'...);
    • insert into user values('wyj','20165322');
  • 查詢表中的數據:select * from 表名;

  • 增長新用戶:
    grant select,insert,update,delete on 數據庫.* to 用戶名@登陸主機(能夠是localhost,也能夠是遠程登陸方式的IP) identified by "密碼";
    (意思是將對某數據庫的全部表的增刪查改權限授予某ip登陸的某用戶)
    • grant select,insert,update,delete on wyj.* to wyj@localhost identified by "12345678";

    • 增長新用戶後,使用新的用戶名和密碼進行登陸:mysql -u wyj -p

    登錄成功

返回目錄

(四)Web後端:編寫PHP網頁,鏈接數據庫,進行用戶認證

  • 在/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,結合前面編寫的登陸網頁進行登陸身份認證(注意要與前端action指定的php名稱對應,注意對應本身的庫名和表名),修改後的login.php代碼以下:
<?php
$uname=$_POST["Name"];
$pwd=$_POST["Password"];
echo $uname;
$query_str="SELECT * FROM user where Name='$uname' and Password='$pwd';";
$mysqli = new mysqli("127.0.0.1", "wyj", "12345678", "wyj");

/* 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();
?>

關於$mysqli = new mysqli("127.0.0.1", "wyj", "12345678", "wyj");//第一個wyj是新建的用戶名,12345678是新建用戶密碼,第二個wyj是數據庫的名稱

  • 在瀏覽器輸入127.0.0.1/test.html訪問本身的登陸界面
  • 輸入正確的用戶名和密碼進行認證

返回目錄


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

SQL注入

  • 原理:咱們輸入的用戶名和咱們代碼中的select語句組合起來變成了select * from users where username='' or 1=1#' and password=''。解讀一下這個代碼,#至關於註釋符,即這個代碼至關於1=1時,就能跳轉登陸成功頁面。
  • 實際操做以下:
    • 在瀏覽器輸入127.0.0.1/test.html訪問本身的登陸界面
    • 在用戶名輸入框輸入' or 1=1#,密碼任意輸入,可登陸成功

XSS攻擊

  • 將一張圖片放在/var/www/html目錄下,命名爲1.jpg
  • 在瀏覽器輸入127.0.0.1/test.html訪問本身的登陸界面
  • 在用戶名輸入框中輸入<img src="1.jpg" />,密碼隨意輸入,就能夠讀取到圖片

返回目錄

基礎問題回答

(1)什麼是表單

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

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

  • 瀏覽器能夠解析HTML,XML,Python,PHP,JavaScript,ASP等腳本語言。

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

  • ASP全名Active Server Pages,是一個WEB服務器端的開發環境,ASP採用腳本語言VBScript(Java script)做爲本身的開發語言。
  • PHP是一種跨平臺的服務器端的嵌入式腳本語言。它大量地借用C,Java和Perl語言的語法,並融合PHP本身的特性,使WEB開發者可以快速地寫出動態產生頁面
  • JSP全名Java ServerPage,能夠在Servlet和JavaBean的支持下,完成功能強大的站點程序

返回目錄

實驗總結與體會

本次實驗我複習了之前學習過的html網頁代碼和JavaScript編程,同時瞭解到了利用SQL和XSS的攻擊手段,咱們在編寫後臺代碼的時候,必定要對數據進行一些處理而不是直接顯示,也要除去一些特殊語句對數據庫的攻擊,才能保證網頁的安全。

相關文章
相關標籤/搜索