(1).Web前端HTMLjavascript
能正常安裝、啓停Apache。理解HTML,理解表單,理解GET與POST方法,編寫一個含有表單的HTML。php
(2).Web前端javascipthtml
理解JavaScript的基本功能,理解DOM。編寫JavaScript驗證用戶名、密碼的規則。前端
(3).Web後端:MySQL基礎:正常安裝、啓動MySQL,建庫、建立用戶、修改密碼、建表java
(4).Web後端:編寫PHP網頁,鏈接數據庫,進行用戶認證mysql
(5).最簡單的SQL注入,XSS攻擊測試web
功能描述:用戶能登錄,登錄用戶名密碼保存在數據庫中,登錄成功顯示歡迎頁面。sql
1.什麼是表單?數據庫
2.瀏覽器能夠解析運行什麼語言?apache
3.WebServer支持哪些動態語言?
實驗環境: kali
重要目錄、文件
/etc/apache2/apache2.conf 存儲apache2的配置
/var/www/html 存儲網頁
/var/log/apache2/error.log 存儲報錯信息
1.咱們的Web開發是基於Apache服務器進行的,直接使用指令apachectl start
打開Apache服務,使用netstat -aptn
查看一下端口占用,因爲上次修改了端口文件,因此仍是佔用了80端口:
2.以後cd /var/www/html
進入到Apache的工做目錄下.
注意輸入
cd var/www/html
會找不到
vi test1.html
新建一個含有表單的html咱們經常使用的登陸頁面通常就是用表單向後臺提交數據,因此能夠編寫一個登陸頁面,代碼以下:
<html> <head> <title>test</title> </head> <body> <table> <form method ="POST" action="#" name="frmLogin" > <tr> <td>username: </td> <td><input type="text" name="username" value="Your name" size="20" maxlength="20" /></td> <td> </td> <td> </td> </tr> <tr> <td>password:</td> <td><input type="password" name="password" value="Your password" size="20" maxlength="20" /></td> <td> </td> <td> </td> </tr> <tr> <td><input type="checkbox" name="zlogin" value="1">auto-Login</td> </tr> <table> <tr> <td><input type="submit" name="login" value="Login" /></td> <td><input type="reset" name="rs" value="Reset" /></td> </tr> </table> </form> </table> </body> </html>
1.用瀏覽器打開這個網頁:
2.填寫上內容並submit,由於沒有上面代碼裏標出的一行中action指定php文件,登錄不了。
1.咱們可使用JavaScript來編寫一個驗證用戶名、密碼的規則,直接在以前的代碼基礎上加入如下代碼,命名爲login_test.html:
<script language="javascript"> function validateLogin(){ var sUserName = document.frmLogin.username.value ; var sPassword = document.frmLogin.password.value ; if ((sUserName =="") || (sUserName=="Your name")){ alert("please input the username"); return false ; } if ((sPassword =="") || (sPassword=="Your password")){ alert("please input the password"); return false ; } } </script>
2.編了一個驗證的函數,若是輸入的用戶名或者密碼爲空時,就彈出相應的對話框,而後在點擊登陸按鈕時效果以下:
1.先輸入/etc/init.d/mysql start
指令開啓mysql服務,輸入mysql -u root -p
,並根據提示輸入密碼,默認密碼爲p@ssw0rd,進入MySQL。
注意:在MySQL中輸入命令後面都要帶一個分號做爲命令結束符:
2.咱們能夠對密碼進行修改:輸入use mysql;
,選擇mysql數據庫;輸入update user set password=PASSWORD("新密碼") where user='root';
,修改密碼;輸入flush privileges;
,更新權限;
3.接着輸入quit
退出MySQL,輸入mysql -u root -p
從新進入,使用新密碼登陸成功,說明修改爲功:
4.咱們先使用create database 庫名;
創建一個數據庫;使用show databases;
查看存在的數據庫;使用use 庫名;
使用咱們建立的數據庫:
5.接着使用create table 表名 (字段設定列表);
創建數據表,數據表是數據庫中一個很是重要的對象,一個數據庫中可能包含若干個數據表;使用show tables;
查看存在的數據表:
6.使用insert into 表名 values('值1','值2','值3'...);
插入數據;使用select * from 表名;
查詢表中的數據:
7.咱們還能夠在MySQL中增長新用戶,使用grant select(insert,update,delete) on 數據庫.* to 用戶名@登陸主機 identified by "密碼";
指令,如圖所示,增長新用戶以後,退出,從新使用新用戶名和密碼進行登陸,登陸成功說明增長新用戶成功:
1.咱們能夠在/var/www/html
目錄下新建一個hwf_test.php測試文件,簡單瞭解一下它的一些語法:
<?php echo ($_GET["a"]); include($_GET["a"]); echo "This is hwf php test page!<br>"; ?>
1.瀏覽器打開localhost:80/hwf_test.php?a=/etc/passwd
可看到/etc/passwd
文件的內容:
2.簡單測試完成後,咱們能夠利用PHP和MySQL結合以前編的登陸網頁進行簡單的用戶身份認證,這裏能夠參考老師給的代碼編寫login.php,代碼以下所示:
<?php $uname=$_POST["username"]; $pwd=$_POST["password"]; echo $uname; echo $pwd; $query_str="SELECT * FROM hwftable where username='$uname' and password='$pwd';"; $mysqli = new mysqli("127.0.0.1", "haowenfei", "20155308", "5308_test"); /* 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 = $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(); ?>
1.這裏作幾點說明,第五行中users是我本身的表名,根據實際修改。127.0.0.1是本機地址,haowenfei是MySQL的用戶名,20155308是我以前設置的登陸密碼,5308_test是數據庫的庫名。
2.先將以前編的登陸網頁的login_test.html
代碼中form
的action
屬性由#
改爲login.php
,即登陸後跳轉到login.php,再在火狐瀏覽器中輸入localhost:80/login_test.html
訪問本身的登陸頁面:
3.在登陸頁面中輸入數據庫中存有的用戶名和密碼並點擊登陸進行用戶認證,若是登陸以後,顯示以下所示畫面:
4.在登陸頁面中輸入數據庫中存有的用戶名和密碼並點擊登陸進行用戶認證,若是登陸以後,顯示以下所示畫面:
5.最後結果,登錄成功!
6.若是庫、表和字段對應沒有搞清楚,很容易認證失敗
1.在用戶名輸入框中輸入' or 1=1#
,密碼隨便輸入,可以成功登錄:
2.咱們還能夠經過SQL注入將用戶名和密碼保存在數據庫中,login.php文件中if ($result = $mysqli->multi_query($query_str))
能實現執行多個sql語句。
3.接着在用戶名輸入框中輸入';insert into hwftable values('zn','5314','17888811781');#
,拆開來看就是SELECT * FROM fwhtable WHERE username='';
、insert into lxmtable values('zn','5314','17888811781')
;,接着登陸,登錄失敗:
3.咱們能夠在數據庫中查詢一下是否真的添加成功,如圖所示說明插入成功:
4.接着使用新插入的用戶名和密碼進行登陸,登陸成功:
1.咱們能夠進行一個簡單的測試,在用戶名輸入框中輸入
<img src="u=3138279254,279646095&fm=27&gp=0.jpg" />balabala</a>
讀取/var/www/html目錄下的圖片:
2.點擊登陸後咱們能夠看到圖片: