瀏覽器只看得懂html、css、js、xml等語言,像其餘的服務器端動態腳本,如php、jsp等的解析工做是在服務器完成的。javascript
目前,最經常使用的三種動態網頁語言有ASP(ActiveServerPages),JSP(JavaServerPages),PHP(HypertextPreprocessor)。php
三者都提供在HTML代碼中混合某種程序代碼、由語言引擎解釋執行程序代碼的能力。但JSP代碼被編譯成Servlet並由Java虛擬機解釋執行,這種編譯操做僅在對JSP頁面的第一次請求時發生。在ASP、PHP、JSP環境下,HTML代碼主要負責描述信息的顯示樣式,而程序代碼則用來描述處理邏輯。普通的HTML頁面只依賴於Web服務器,而ASP、PHP、JSP頁面須要附加的語言引擎分析和執行程序代碼。程序代碼的執行結果被從新嵌入到HTML代碼中,而後一塊兒發送給瀏覽器。ASP、PHP、JSP三者都是面向Web服務器的技術,客戶端瀏覽器不須要任何附加的軟件支持。css
返回目錄html
1.安裝阿帕奇時出現沒法得到鎖錯誤「E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)」
前端
ps -A | grep apt
查看有哪些進程與「apt」有關sudo apt-get install apache2
,第二次運行就能夠了。2.運行service apache2 start
開啓阿帕奇時再次出錯:
java
journalctl -xe
查看具體的錯誤緣由以下:netstat -tupln | grep 80
查看Local Address中Listening 80的應用的PID, 去任務管理器中找到對應的進程,而後用kill processID(進程ID)
關閉此進程便可,再次開啓Apache再也不有錯誤提示,以下圖所示:【注】:這裏也能夠經過修改配置文件的方法,把Apache的默認端口從80改成其餘的未被佔用的端口。mysql
3.運行netstat -aptn
後,發現了正在使用端口80的Apache2,說明開啓成功:web
4.下面進行兩個測試,看看Apache工做是否正常:sql
127.0.0.1:80
127.0.0.1:80/20155312/login.html
8.接下來進行前端編程,我只把Eclipse中的登陸界面代碼修改了兩個地方:數據庫
<form action="login.php" method="post" >
,具體php文件怎麼寫,咱們面再詳細介紹。三要注意添加javascript的相關代碼,個人代碼實現了利用javascript檢查用戶名或密碼是否爲空,若爲空則彈出提示框並從新跳轉回登陸界面:
注:若要按登陸按鈕先調用本身編寫的函數,必定要將登陸按鈕的type設置爲button而非submmit,如type = "button"
不然,會出現出現警告框點肯定後,沒法跳轉到指定界面的錯誤。
個人前端代碼以下:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>登陸頁面</title> <script language="javascript"> var movingID=null; var scrolling=false; function startMove() { var left=eval(bear.style.left.replace("px","")); if(left <document.body.scrollWidth-400) bear.style.left=left+1; else bear.style.left=1; movingID=setTimeout("startMove()",0.1); } function mysubmit() { if(document.form1.password.value=="" || document.form1.username.value=="") { alert("用戶名、密碼不能爲空!"); window.location.href="login.html" } else form1.submit(); } </script> <style type="text/css"> a:link{color:#41506D;font-size:125%;text-decoration:none} a:visited{color:#41506D;font-size:125%;text-decoration:none} a:hover{color:#FFF200;font-size:125%;text-decoration:none} </style> </head> <body onload="startMove()" style="background-image: url(./login.png);background-repeat:no-repeat;topmargin:60;leftmargin:12 ;overflow-x:hidden;overflow-y:scroll;" > <br><br><br> <p align="right"> <a target=_parent href="index.jsp" >登 錄</a> <a target=_parent href="addone.jsp" >注 冊</a> </p> <form action="login.php" method="post" name="form1"> <table style="background: url(./登陸.png);background-repeat:no-repeat;position:relative;left:300px;top:0px;border-collapse:collapse;"> <tr><th style="border:5px solid white;height:50px;width:230px;padding:0px;text-align:center;vertical-align:center;color:#41506D;font-size:150%;font-family:Microsoft YaHei UI;"> 帳 號 密 碼 登 錄 </th></tr> <tr> <td style="border:5px solid white;height:180px;width:230px;padding:0px;text-align:center;vertical-align:center;color:#41506D;"> <p style="position:absolute;left:27px;top:50px;font-size:130%;color:white;font-family:Microsoft YaHei UI;">用戶名 </p> <input align="center" type="text" name = "username" style="position:absolute;left:100px;top:70px;height:35px;width:100px;font-size:130%;"/> <br><br> <p style="position:absolute;left:27px;top:100px;font-size:130%;color:white;font-family:Microsoft YaHei UI;">密 碼 </p> <input align="center" type="password" name = "password" style="position:absolute;left:100px;top:120px;height:35px;width:100px;font-size:130%;"> <br> <input type = "button" value = "提交" onClick="mysubmit()" style="position:absolute;left:50px;top:190px;height:35px;width:150px;font-size:120%;"> </td> </tr> </table></form> <div id="bear" style="visibility:visible;position:absolute;left:1px;top:330px;z-index:1;width:400px;height:170px;overflow-x:hidden;overflow-y:hidden;"> <img src="./北極熊2.png"> <img src="./北極熊3.png"> </div> </body> </html>
9.下載安裝php並進行測試
sudo apt-get install php
<?php include($_GET["a"]); ?>
127.0.0.1:80/test.php?a=/etc/passwd
可看到/etc/passwd文件的內容,以下圖所示。service apache2 start
)10.後臺php編程,因爲後臺編程涉及到數據庫名稱和具體的字段名稱,因此先進行後續的數據庫操做,再回頭編寫後臺。
11.安裝MySQL,執行指令apt-get install mysql-server mysql-client mysql-workbench
後,安裝失敗,提示「Package mysql-client is not available, but is referred to by another package」,以下圖所示:
sudo apt-get -y update
、運行apt-get update
和apt-get upgrade
都沒有解決問題。猜想老師的虛擬機已經下載好了mysql。service start/stop/restart mysql
也不行,最終運行`/etc/init.d/mysql start
開啓MySQL服務就能夠了……12.開啓mysql後,先登陸root用戶,密碼是p@ssw0rd
直接複製粘貼就好,不要嘗試本身輸入了,我試了p@ssw0rd,p@sswOrd都不行,不知道咋回事
13.用show databases;
查看數據庫基本信息,注意這裏每一個sql語句要以分號爲結尾,否則就會像我這樣:
14.輸入use mysql;
選擇使用mysql這個數據庫
15.輸入select user, password, host from user;
查看當前用戶信息
16.輸入update user set password=PASSWORD("新密碼") where user='root';
更改密碼
17.輸入flush privileges;
更改權限
18.輸入exit
退出,而後使用新密碼從新登陸mysql -u root -p
19.輸入create database 數據庫名稱;
建立數據庫,注意這裏數據庫名字不能夠是學號這些數字,不然會出現我這樣的錯誤,用英文吧~
20.輸入show databases;
查看存在的數據庫;輸入use zjy
使用剛建立的數據庫zjy。
21.輸入create table user (username VARCHAR(20),password VARCHAR(20));
建立一個名爲user的數據表,表中包含VARCHAR類型的兩個字段:username和password
22.輸入show tables;
查看全部的表,能夠發現剛剛新建的user
23.輸入insert into user values('20155312','1234');
向表中username password兩個字段插入數據,即用戶名爲20155312,密碼爲1234
24.輸入grant select,insert,update,delete on zjy.* to zjy@localhost identified by "20155312";
將對某數據庫的全部表的select,insert,update,delete權限授予當前主機localhost登陸的用戶zjy,2015312是登陸密碼,注意加引號。
25.輸入輸入exit
退出,而後使用新密碼從新登陸zjy用戶mysql -u zjy -p
登陸成功,說明用戶建立成功。
26.如今開始後臺編程,編寫login.php,注意要與前端action指定的php名稱對應,具體代碼以下:
<?php $uname=$_POST["username"]; $pwd=$_POST["password"]; echo $uname; $query_str="SELECT * FROM user where username='$uname' and password='$pwd';"; $mysqli = new mysqli("127.0.0.1", "zjy", "20155312", "zjy"); /* 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(); ?>
登陸成功以下圖所示:
輸入一個數據庫中根本沒有的用戶名和密碼,顯示鏈接數據庫成功,但登陸失敗
27.接下來進行SQL注入攻擊,在用戶名輸入框中輸入' or 1=1#
,密碼隨便輸入,是能夠登錄成功的。
' or 1=1#
提交到後臺後,被做爲SQL語句中的第一個參數填入,使SQL語句變成select * from users where username='' or 1=1#' and password=''
,#
至關於註釋符,會把後面的內容都註釋掉,而1=1是永真式,因此這個條件永遠成立,因此可以成功登錄。所以,要想避免SQL注入,應當限制用戶在用戶名中輸入'
、#
等特殊符號。28.嘗試經過SQL注入新建用戶名和密碼並保存在數據庫中,這樣下次用本身偷偷新建的用戶名密碼登陸便可。
if ($result = $mysqli->query($query_str))
改成if ($result = $mysqli->multi_query($query_str))
使其容許一次執行多個SQL語句29.用戶名除輸入';insert into users values('20155333','111');#
爲個人室友偷偷建一個用戶,用戶名20155333,密碼111
'
的存在,該語句被拆成了如下兩個SQL語句,第一個語句雖然會致使登陸失敗,但第二個添加了一個用戶數據。
#
把後面的都註釋掉了,因此無論密碼輸入什麼按道理都不影響咱們能夠查看一下本地數據,看看有沒有增長什麼
結果並無成功,爲何呢????我也不知道哎
30.接下來嘗試進行XSS攻擊即跨站腳本攻擊,首先將一張圖片login.png 存入/var/www/html目錄
31.在用戶名輸入框中輸入<img src="login.png " />balabala</a>
讀取/var/www/html目錄下的圖片
運行結果以下所示,正確顯示了網頁背景圖:
本次實驗,我最大的體會就是,網絡對抗這門課是個綜合性很強的課程,能夠與不少咱們學過或正在學習的課程融通,好比上學期的網絡安全編程基礎,和這學期的信息系統安全等,關於網頁編程和數據庫的知識,確實打下了基礎後進行跨平臺學習也會相對容易,就像學會了c語言再學其餘語言時也會節省很多力氣。因此,我以爲既然學一門課就要學好、弄懂,若是隻是浮於表面,或是最後應付一個考試,可能真的等到畢業後就都忘記了。