本實踐的具體要求有:javascript
Web前端HTML;能正常安裝、啓停Apache。理解HTML,理解表單,理解GET與POST方法,編寫一個含有表單的HTML。php
Web前端javascipt:理解JavaScript的基本功能,理解DOM。編寫JavaScript驗證用戶名、密碼的規則。html
Web後端:MySQL基礎:正常安裝、啓動MySQL,建庫、建立用戶、修改密碼、建表前端
Web後端:編寫PHP網頁,鏈接數據庫,進行用戶認證java
最簡單的SQL注入,XSS攻擊測試python
登錄後發帖及其會話管理(選作)mysql
注意:功能描述用戶能登錄,登錄用戶名密碼保存在數據庫中,登錄成功顯示歡迎頁面。web
由於web卡發是基於apache服務器進行的,對於apache的基本操做是要掌握的,在上次的dns欺騙的實驗中已經用過。對於apache曾經使用的過的端口能夠在目錄/etc/apapche2/
下的ports.conf
下進行修改。sql
使用命令apachel start
打卡apache,並使用命令netstat -atpn
查看使用端口數據庫
netstat -tupln |grep80
,在使用kill+進程ID
來殺死進程,Apache服務開啓後,咱們在瀏覽器中輸入localhost:8080
由於受上次實驗的影響打開的是上次的假裝頁面,上次最後作的是假裝google郵箱。以後 進入目錄var/www/html
,進入到apache的工做目錄下,在這個目錄下要常用到。此時咱們先簡單的含有表單的html
文件,文件名爲20145335.html
(由於這個是用來測試,因此就使用了ltc同窗的代碼)
代碼如上,在火狐瀏覽器下訪問`localhost:8080/20145335.html`打開,由於沒有編寫以後的提交代碼,點擊提交會顯示404網頁錯誤。
注意:選用method是Post
,method的屬性有兩種分爲Get
和Post
Get是用來從服務器上得到數據,而Post是用來向服務器上傳遞數據;
Get傳輸的數據量小,這主要是由於受URL長度限制,而Post能夠傳輸大量的數據,因此在上傳文件只能使用Post;
Get將表單中數據的按照variable=value的形式,添加到action所指向的URL後面,而且二者使用「?」鏈接,而各個變量之間使用「&」鏈接;Post是將表單中的數據放在form的數據體中,按照變量和值相對應的方式,傳遞到action所指向URL;
JavaScript是一種屬於網絡的腳本語言,已經被普遍用於Web應用開發,經常使用來爲網頁添加各式各樣的動態功能,現代全部的web都是使用javascipt來編寫完成的。
一般Javascipt腳本是經過嵌入在HTML中來實現自身功能的。
代碼以下
<html> <head> <meta charset="utf-8"> <title>login</title> </head> <body> <div id="container" style="width:500px"> <div id="header" style="background-color:#FFA500;"> <h1 style="margin-bottom:0;">Weclome</h1> <div id="login"style="backgroung-color:#EEEEEE:height:200px;width400px;float:left;" > <form name='form' class="form" method='get' action='login.php'> <input type="text" required="required" placeholder="username" name='username'> <br> <input type="password" required="required" placeholder="password" name='password'> <br> <button class="but" type='submit'>login</button> </form> </div> <div id="footer" style="background-color:#FFA500;clear:both;text-align:center;">from 20145335.com</div> </div> </body> </html>
經過老師介紹的菜鳥網站菜鳥網站:javascipt教程能夠很好的理解javascipt知識。
關於Mysql在之前遇到的計算機實習中,爲了完成實驗結果,惡補過該方面的知識=_=,對於windows下的命令行模式的mysq數據庫的使用較爲熟練,估計kali下也大同小異。
首先開啓sql服務,使用命令/etc/init.d/mysql start
打開
mysql -u root -p
,並根據提示輸入密碼,默認密碼爲p@ssw0rd
(第二個是符號@
,第六個是數字0
)show database;
查看信息 ,注意:mysql的語句默認是以;分號
結尾,輸入回車並不表明命令結束,一個分號算一個命令。use mysql
;,選擇mysql數據庫。(2)輸入select user, password, host from user;
,mysql庫中的user表中存儲着用戶名、密碼與權限。(3)輸入UPDATE user SET password=PASSWORD("新密碼") WHERE user='root';
。(4)輸入flush privileges;
,更新權限(5)輸入quit
退出。mysql -u root -p
進入mysql,使用新修改的密碼。在mysql中新建表,創建表以後在web中可使用相關信息。輸入命令以下:
CREATE SCHEMA `庫表的名稱`; CREATE TABLE `庫表的名稱`.`users` ( `userid` INT NOT NULL COMMENT '', `username` VARCHAR(45) NULL COMMENT '', `password` VARCHAR(256) NULL COMMENT '', `enabled` VARCHAR(5) NULL COMMENT '', PRIMARY KEY (`userid`) COMMENT '');
use 新創建的庫表的表名
、insert into users(userid,username,password,enabled) values(1,'用戶id',password("用戶密碼"),"TRUE");
在目錄/var/www/html
下新建一個20145335.php
測試文件,看是否能夠打開。
用瀏覽器再地址欄輸入localhost:8080/20145335.php
打開本地文件。成功打開,能夠進行以後的步驟。
注意:所涉及到的文件名稱須要放在同一個目錄下即/var/www/html
首先編寫登錄界面login.html
,寫登錄界面的代碼的時候加了一個框架<div>...</div>
使整個界面顯的乾淨一些,但顏色並無分開,偷懶使用了一個顏色=_=。
login.php
代碼實現與數據庫的連接,按照老師的代碼進行參考。有幾點須要注意:命令$mysqli = new mysqli ("ip地址","mysql用戶","mysql用戶的密碼","使用的表名")
ip地址填本機ip地址,就是127.0.0.1
,填寫網絡地址會影響到實驗結果。localhost:8080/login.html
打開本地文件,就能夠訪問以前寫好的網址,能夠嘗試很結果能成功登錄的,也有登錄失敗的,沒法鏈接的。
SQL注入,就是經過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。具體來講,它是利用現有應用程序,將(惡意的)SQL命令注入到後臺數據庫引擎執行的能力,它能夠經過在Web表單中輸入(惡意)SQL語句獲得一個存在安全漏洞的網站上的數據庫,而不是按照設計者意圖去執行SQL語句。即sql注入是將用戶輸入的惡意字符串當成「sql」語句執行
在用戶名輸入框中輸入' or 1=1#
密碼隨便輸入,這時候的合成後的SQL查詢語句爲select * from users where username='' or 1=1#' and password=md5('')
由於1=1是爲真,那麼必定能夠登上。
咱們還能夠經過sql注入將用戶名和密碼保存在數據庫中,可是須要修改以前的代碼,由於咱們以前編的代碼中if ($result = $mysqli->query($query_str))
這條判斷語句不容許多條sql語句執行,因此將它改爲if ($result = $mysqli->multi_query($query_str))
便能實現執行多個sql語句。
在歡迎界面用戶用一欄內輸入';insert into users(userid,username,password,enabled) values(777,'121212',password("121212"),"TRUE");#
進行嘗試,在數據庫中查詢到。
以後使用命令`';insert into users(userid,username,password,enabled) values(555,'353535',password("353535"),"TRUE");#`也能夠查詢到。成功的用sql注入將信息保存在數據庫中。
XSS表示Cross Site Scripting(跨站腳本攻擊),經過插入惡意腳本,實現對用戶遊覽器的控制。攻擊者利用XSS漏洞旁路掉訪問控制——例如同源策略(same origin policy)。這種類型的漏洞因爲被駭客用來編寫危害性更大的phishing攻擊而變得廣爲人知。對於跨站腳本攻擊,黑客界共識是:跨站腳本攻擊是新型的「緩衝區溢出攻擊「,而JavaScript是新型的「ShellCode」。
可是這個實驗不論怎麼作圖片就是出不來,很心累=_=
將圖片保存到以前的目錄下/var/www/html,以後在用戶名一欄輸入命名<img src="20145335.jpg"/>5335</a>
嘗試了不少次就是沒有作出來。
/var/www/html
下,在瀏覽器中輸入http://localhost:80/logIn.php
,進行登陸:start a new post!
發帖,進入以下界面:CHECK
查看發過的帖子,可是卻什麼內容都沒有,因爲這個操做是經過從data.txt
文件中讀取以前發帖時保存的記錄來查看發帖內容,可是在/var/www/html
目錄下根本沒有找到這個文件,這就說明以前建立也沒有成功,後面發現/var/www/html
底下文件默認的都是屬於root
的,其餘用戶沒有權限進行操做,因此咱們能夠先使用touch data.txt
建一個data.txt
文件,再對該文件進行加權:什麼是表單?
答:表單是一個包含表單元素的區域,表單元素是容許用戶在表單中(好比:文本域、下拉列表、單選框、複選框等等)輸入信息的元素,表單在網頁中主要負責數據採集功能,一個表單有三個基本組成部分:表單標籤、表單域、表單按鈕;
瀏覽器能夠用什麼語言?
答:常見的可使用html語言、xml語言、以及php語言、javascript語言,本次實驗都有所涉及,還有python語言。
WebServer支持哪些動態語言?
答:javascript、ASP、PHP、Ruby等語言。
本次實驗難度我的感受應該在網頁的聯通和測試上,代碼是一項很大的問題,以前雖然有學過這個web前端的知識,可是也忘得差很少了,此次不少的問題都存在於代碼的編寫上,感受了攻克了代碼問題實驗也就好解決許多了,藉助了老師給的代碼的註釋和代碼不少問題仔細研究就會解決出來。