1. 程式人生 > >20164305 徐廣皓 Exp 8 Web基礎

20164305 徐廣皓 Exp 8 Web基礎

數據庫表 歡迎頁 代碼片段 計算 ebs service div eset _for

1.實踐具體要求

  • (1)Web前端HTML(0.5分)
    • 能正常安裝、啟停Apache。理解HTML,理解表單,理解GET與POST方法,編寫一個含有表單的HTML。
  • (2)Web前端javascipt(0.5分)
    • 理解JavaScript的基本功能,理解DOM。編寫JavaScript驗證用戶名、密碼的規則。
  • (3)Web後端:MySQL基礎:正常安裝、啟動MySQL,建庫、創建用戶、修改密碼、建表(0.5分)

  • (4)Web後端:編寫PHP網頁,連接數據庫,進行用戶認證(1分)

  • (5)最簡單的SQL註入,XSS攻擊測試(1分)
    • 功能描述:用戶能登陸,登陸用戶名密碼保存在數據庫中,登陸成功顯示歡迎頁面。

2.基礎問題回答

  • (1)什麽是表單?
    • 可以收集用戶的信息和反饋意見,是網站管理者與瀏覽者之間溝通的橋梁。
  • (2)瀏覽器可以解析運行什麽語言?
    • 支持HTML(超文本標記語言)、XML(可擴展標記語言)以及Python、PHP、JavaScript、ASP等眾多腳本語言。
  • (3)WebServer支持哪些動態語言?
    • Active Server Pages

      • Microsoft已開發出一種用於生成稱為 Active Server Pages 的動態Web內容的技術,簡稱 ASP。使用ASP,Web 服務器上的HTML頁面可以包含嵌入代碼的片段(通常是VBScript或JScript-盡管幾乎可以使用任何語言)。在將頁面發送到客戶端之前,Web服務器將讀取並執行此代碼。
    • Server-side JavaScript

      • Netscape 也有一種服務器端腳本技術,它被稱為服務器端 JavaScript,或簡稱為 SSJS。與 ASP 一樣,SSJS 同樣允許將代碼片段嵌入到 HTML 頁面中以生成動態 Web 內容。區別在於 SSJS 使用 JavaScript 作為腳本語言。使用 SSJS,可以預編譯網頁以提高性能。
    • Java Server pages

      • 想了解 jsp(Java Server Pages) 那麽就不得不說一下和他直接相關的,Java Servlet。
      • Java Serlvet(Java Server Side applet) 是在服務器端的 Java 程序,他擴展了服務器的功能,通過運行 由 Serlvet 引擎管理的 JVM 來運行 Java 程序而提供動態更新 HTML 的功能 (使用不同的技術來實現類似 CGI 程序的功能,但不完全同於 CGI,Servlet 有自己的約定)。Java Serlvet 的優點很吸引人,具有 Java 語言的優點和平臺無關性;因為 Serlvet 在 Web 服務器中運行,所以可以很容易的訪問 Web 服務器的資源;支持在 JVM 中運行多線程,每個請求將對應一個 Serlvet 線程,對比 CGI 創建進程的方式將節省很大的時間和空間資源。但是工程師們向來都是抵制麻煩尋找便利的人群,使用 Java Servlet 編寫服務器端頁面,不可避免的就是再次需要在 Java 代碼中嵌入前端 HTML 代碼,這給編碼體驗造成了很大影響,為了實現工程師友好(增加這門技術對工程師的吸引力),於是和 PHP 在 HTML 中嵌入代碼相似,Java servlet 也實現這一特性,允許在 HTML 中嵌入 Java 代碼。更進一步,將一些 Java 代碼封裝起來換一種更加易於理解和使用的語法,就產生了 JSP。JSP 真正運行時,是會被 Servlet 容器給編譯成 Java Servlet 代碼的,所以實際運行的還是 Java 程序。JSP 只是一個工程師友好的中間層。

3.Web前端:HTML

1.kali默認已安裝Apache,直接使用 service apache2 start 命令打開Apache服務即可。

技術分享圖片

  • 此時在瀏覽器輸入127.0.0.1,如果可以打開Apache的默認網頁,則開啟成功:

技術分享圖片

2.使用 cd /var/www/html 進入Apache目錄下,新建一個簡單的含有表單的html文件 simple_form.html

技術分享圖片

 1 <html>
 2 <head>
 3 <title>CryptoTeam</title>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 </head>
 6 <body>
 7     <h2>Login Quick</h2>
 8         <form action="login" method="post">
 9             <input placeholder="E-mail" name="Name" class="user" type="email">
10             <br>
11             </br>
12             <input  placeholder="Password" name="Password" class="pass" type="password">
13             <br>
14             </br>
15             <input type="submit" value="Login">
16         </form>
17 </body>
18 </html>
  • 在瀏覽器嘗試打開

技術分享圖片

4.Web前端:javascipt

1.在原有 simple_form.html 基礎上,可以添加一段JavaScript代碼,以完成對用戶是否填寫郵箱和密碼的判斷。修改後的 login_test.html 如下所示:

 1 <html>
 2 <head>
 3 <title>CryptoTeam</title>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 </head>
 6 <body>
 7     <h2>Login Quick</h2>
 8         <form action="login" method="post" name="form_login">
 9             <input placeholder="E-mail" name="Email" class="user" type="email" onfocus="if (this.value==‘Your email‘) this.value=‘‘;" />
10             <br>
11             </br>
12             <input  placeholder="Password" name="Password" class="pass" type="password" onfocus="if (this.value==‘Your password‘) this.value=‘‘;"/>
13             <br>
14             </br>
15             <input type="submit" value="Login" onClick="return validateLogin()"/>
16         </form>
17 <script language="javascript">  
18     function validateLogin(){  
19         var sUserName = document.form_login.Email.value ;  
20         var sPassword = document.form_login.Password.value ;    
21         if ((sUserName =="") || (sUserName=="Your email")){  
22         alert("user email!");  
23         return false ;  
24         }  
25         if ((sPassword =="") || (sPassword=="Your password")){  
26         alert("password!");  
27         return false ;  
28         }  
29     }   
30 </script>  
31 </body>
32 </html>

2.在瀏覽器訪問 file:///var/www/html/login_test.html ,如果用戶郵箱或密碼未填,網頁會提示:

技術分享圖片

5.Web後端:MySQL基礎

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

技術分享圖片

2.輸入 mysql -u root -p 使用root權限進入,默認的密碼是password

技術分享圖片

3.輸入 update user set password=PASSWORD("newpassword") where user=root; ,修改密碼;輸入 flush privileges; 更新權限

技術分享圖片

4.輸入 exit 退出數據庫,使用新的密碼登錄

技術分享圖片

5.使用 create database databasename; 建立數據庫

技術分享圖片

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

技術分享圖片

7.使用 use databasename; 使用我們創建的數據庫

技術分享圖片

8.使用 create table tablename; 建立數據庫表,並設置字段基本信息

技術分享圖片

9.使用 show tables; 查看表信息

技術分享圖片

10.使用 insert into tablename values(1,2); 插入數據

技術分享圖片

11.使用 select * from tablename; 查詢表中的數據

技術分享圖片

12.在MySQL中增加新用戶,使用 grant select,insert,update,delete on sql.* to [email protected] identified by "password";

技術分享圖片

13.增加新用戶後,使用新的用戶名和密碼進行登錄

技術分享圖片

6.Web後端:編寫PHP網頁

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

1 <?php
2 echo ($_GET["a"]);
3 include($_GET["a"]);
4 echo "This is my php test page!<br>";
5 ?>

2.在瀏覽器網址欄中輸入 localhost/phptest.php?a=/etc/passwd ,可看到 /etc/passwd 文件的內容

技術分享圖片

3.利用PHP和MySQL,結合之前編寫的登錄網頁進行登錄身份認證,修改後的 login.php login.html 代碼如下

 1 <html>
 2 <head>
 3 <title>login</title>
 4 </head>
 5 <h1>Login</h1>
 6 <body>
 7 <table>
 8  <form action="login.php" method="GET" name="form_login">
 9 <tr>
10 <td>username:</td>
11 <td><input type="text" name="username" size="20" maxlength="20"onfocus="if (this.value==‘You name‘)this.value=‘‘;"/></td>
12 </tr>
13 <tr>
14 <td>password:</td>
15 <td><input type="password" name="password" size="20" maxlength="20"onfocus="if (this.value==‘You password‘)this.value=‘‘;"/></td>
16 </tr>
17 <table>
18 <tr>
19 <td><input type="submit" name="login" value="submit"onClick="return validateLogin()"/></td>
20 <td><input type="reset" name="rs" value="reset"/></td>
21 </tr>
22 </table>
23 </from>
24 </table>
25 
26 <script language="javascript">  
27     function validateLogin(){  
28         var sUserName = document.form_login.username.value ;  
29         var sPassword = document.form_login.password.value ;    
30         if ((sUserName =="") || (sUserName=="Your name")){  
31         alert("user email!");  
32         return false ;  
33         }  
34 
35         if ((sPassword =="") || (sPassword=="Your password")){  
36         alert("password!");  
37         return false ;  
38         }  
39 
40     }   
41 </script>  
42 
43 </body>
44 </html>
 1 <?php
 2 $uname=($_GET["username"]);
 3 $pwd=($_GET["password"]);
 4 echo $uname;
 5 $query_str="SELECT * FROM testtable where username=‘$uname‘ and password=‘$pwd‘;";
 6 $mysqli = new mysqli("127.0.0.1", "root", "123456", "xgh");
 7 
 8 /* check connection */
 9 if ($mysqli->connect_errno) {
10     printf("Connect failed: %s\n", $mysqli->connect_error);
11     exit();
12 }
13 echo "connection ok!";
14 /* Select queries return a resultset */
15 if ($result = $mysqli->query($query_str)) {
16     if ($result->num_rows > 0 ){
17             echo "<br> {$uname}:Welcome!!! <br> ";
18     } 
19     else {
20         echo "<br> login failed!!!! <br> " ; }
21     /* free result set */
22     $result->close();
23 }
24 $mysqli->close();
25 ?>

4.在瀏覽器輸入 127.0.0.1/login.html 訪問自己的登錄界面,並登錄自己的用戶名和賬號

技術分享圖片

技術分享圖片

7.簡單SQL註入,XSS攻擊測試

1.SQL註入

  • SQL註入原理 是利用現有應用程序,將SQL命令註入到後臺數據庫引擎執行的能力,可以通過在Web表單中輸入SQL語句得到一個存在安全漏洞的網站上的數據庫,而不是按照設計者意圖去執行SQL語句。

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

  • 輸入的用戶名與select語句組合變成 select * from users where username=‘‘ or 1=1# and password=‘‘ ,#起到註釋作用屏蔽了密碼判斷語句,而1=1是1,所以能夠成功登陸。

技術分享圖片

2.XSS攻擊

  • XSS攻擊原理 一種經常出現在web應用中的計算機安全漏洞,它允許惡意web用戶將代碼植入到提供給其它用戶使用的頁面中。

將圖片放在 /var/www/html 目錄下,在用戶名輸入框輸入 <img src="tu.jpg" /> ,密碼任意,就成功登錄

技術分享圖片

技術分享圖片

8.實踐總結及體會

雖然上學期進行過關於MYSQL數據庫學習,但是在網頁編程上遇到了一些困難,本來打算僅依靠學長學姐博客來完成實驗,但是發現模仿並不能解決問題,所以又參考網上資料重新編寫HTML和PHP文件,最後成功地完成了試驗。雖然過程比較艱難,但能成功完成實驗還是很有收獲的。

20164305 徐廣皓 Exp 8 Web基礎