20155333 《網絡對抗》 Exp8 Web基礎

20155333 《網絡對抗》 Exp8 Web基礎

基礎問題

(1)什麼是表單?javascript

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

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

  • 瀏覽器只看得懂html、css、js等
    其餘的服務器端動態腳本,好比php、jsp等,解析工做是在服務器完成的。瀏覽器中能查看php等文件的內容是由於服務器上有php的解析器,好比apache+php, 當瀏覽器請求一個php文件的時候,這個解析器會將這個php文件進行邏輯處理和編譯,再將編譯後的結果轉化成html源發送至瀏覽器進行展現。

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

  • php、asp、net、java、ruby等多種動態開發語言。html

    實踐

    Web前端:HTML

    使用sudo apt-get install apache2安裝Apache服務器前端

安裝出錯!java

ps -A | grep apt查看有哪些進程與「apt」有關,顯示沒有任何進程。
再次安裝sudo apt-get install apache2mysql

安裝成功!
使用service apache2 start打開Apache服務web

在Firefox中輸入127.0.0.1:80,顯示Apache的默認網頁,服務器正常開啓sql

使用cd /var/www/html進入到Apache的工做目錄下,vi form1.html新建一個含有表單的html文件,編寫一個簡單的登陸頁面,代碼以下:數據庫

<html>
<head>
<title>form1</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<table>
    <h2>帳號密碼登陸</h2>
        <form action="login" method="post">
           <tr>  
    <td>用戶名: </td>  
    <td><input type="text" name="username" value="Your name" /></td>  
    <td> </td>  
    <td> </td>  
    </tr>  
    <tr>  
    <td>密碼:</td>  
    <td><input type="password" name="password" value="Your password" /></td>  
    <td> </td>  
    <td> </td>  
    </tr>      
    <table>  
    <tr>  
        <td><input type="submit" value="登陸" /></td> 
    </tr>
    </table>    
        </form>
</table> 
</body>
</html>

在瀏覽器打開:

Web前端:javascipt

在form1.html基礎上,添加一段JavaScript代碼,來判斷用戶是否填寫用戶名和密碼。修改後的form3.html以下所示:

<html>  
<head>  
<title>form2</title>   
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head> 
<body>           
<table>  
    <h2>帳號密碼登陸</h2>
    <form method ="POST" action="login" name="frmLogin"  >  
    <tr>  
    <td>用戶名</td>  
    <td><input type="text" name="username" value="Your name" onfocus="if (this.value=='Your name') this.value='';" /></td>  
    <td> </td>  
    <td> </td>  
    </tr>  
    <tr>  
    <td>密碼</td>  
<td><input type="password" name="password" value="Your password" onfocus="if (this.value=='Your password') this.value='';" /></td>  
    <td> </td>  
    <td> </td>  
    </tr>  
     
    <table>  
    <tr>  
        <input type="submit" name="login" value="登陸" onClick="return validateLogin()"/>
        </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>

在瀏覽器訪問file:///var/www/html/form3.html,若是未填寫用戶名或密碼就提交,就會有提示。

Web後端:MySQL基礎

輸入/etc/init.d/mysql start開啓MySQL服務

輸入mysql -u root -p使用root權限進入,默認密碼:password

輸入update user set password=PASSWORD("新密碼") where user='root';,修改密碼

輸入flush privileges;,更新權限

退出數據庫,用新密碼從新登陸

使用create database 庫名;創建一個數據庫

使用show databases;查看存在的數據庫

使用use 庫名;使用建立的數據庫

使用create table 表名 (字段設定列表);創建數據表

使用show tables;查看存在的數據表

使用insert into 表名 values('值1','值2','值3'...);插入數據

使用select * from 表名;查詢表中的數據

使用grant select,insert,update,delete on 數據庫.* to 用戶名@登陸主機(能夠是localhost,也能夠是遠程登陸方式的IP) identified by "密碼";,在MySQL中增長新用戶

增長新用戶以後退出,使用新的用戶名和密碼進行登陸

登陸成功,說明增長新用戶成功!

Web後端:編寫PHP網頁

/var/www/html目錄下新建一個PHP測試文件test.php,簡單瞭解一下它的一些語法

<?php
echo ($_GET["a"]);
include($_GET["a"]);
echo "This is huan php test page!<br>";
?>

在瀏覽器中輸入localhost:80/lzw_test.php?a=/etc/passwd,可看到/etc/passwd文件的內容

利用PHP和MySQL結合以前編的登陸網頁進行簡單的用戶身份認證,修改後的login.php代碼以下:

<?php
$uname=$_POST["username"];
$pwd=$_POST["password"];
echo $uname;
$query_str="SELECT * FROM form3 where username='$uname' and password='$pwd';";
$mysqli = new mysqli("127.0.0.1", "huan", "20155333", "huan");

/* 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> Welcome login Mr/Mrs:{$uname} <br> ";
    } 
    else {
        echo "<br> login failed!!!! <br> " ; }
    /* free result set */
    $result->close();
}
$mysqli->close();
?>

在瀏覽器中輸入localhost:80/form3.html訪問本身的登陸頁面,輸入表中的username和password,進行用戶認證。

SQL注入,XSS攻擊

SQL注入

在用戶名輸入框輸入' or 1=1#,密碼任意輸入,可登錄成功

這是因爲輸入的用戶名和代碼中select語句組合起來變成了select * from users where username='' or 1=1#' and password='',#至關於註釋符,會把後面的內容都註釋掉,而1=1是永真式,這個條件永遠成立,無論密碼是否輸入正確,都可以成功登錄。

XSS攻擊

將一張圖片放在/var/www/html目錄下,在用戶名輸入框輸入<img src="321.png" />,密碼隨意,便可讀取圖片。

實踐總結及體會

本次實驗完成得較爲順利(大概是虛擬機看在這是倒數第二次實驗的份上放我一馬),多是因爲以前學過web編程及數據庫相關知識的緣由,因此沒有想像中的難。同時也提醒咱們,不要覺得考完試以後學過的知識就沒有用了,它們可能在新的課程中獲得應用。

相關文章
相關標籤/搜索