答:①表單是一個包含表單元素的區域,表單元素是容許用戶在表單中(好比:文本域、下拉列表、單選框、複選框等等)輸入信息的元素,表單在網頁中主要負責數據採集功能,一個表單有三個基本組成部分:表單標籤、表單域、表單按鈕;②表單標籤php
sudo apt-get install apache2 service apache2 start
/etc/apache2/apache2.conf 存儲apache2的配置 web
/var/www/html 存儲網頁 sql
/var/log/apache2/error.log 存儲報錯信息數據庫
這樣按默認配置能夠直接在80端口訪問/var/www/html中的網頁了。apache
若是配置有問題能夠去apache2.conf 找到對應的參數進行修改。編程
<html> <script> function inputTest(){ alert(document.getElementById("ppp").value); //獲取id爲ppp的元素的值並用alert窗口顯示出來,就是上圖的彈窗 if (document.getElementById("ppp").value.length>4){ //若是id爲ppp的元素的值的長度大於4返回真,不然返回假,簡單的密碼格式規範 return true } else { return false; } } </script> <body> <form action="login.php" method="GET" onsubmit="return inputTest()"> //表單,提交後的action指向login.php,onsubmit提交表單時觸發js腳本 <input type="text" name="username" value="Please Input Your Username"/> <br> //上圖中第一個輸入框 <input type="password" name="password" value="default" id="ppp"/> <br> //上圖中第二個輸入框,id爲ppp <input type="submit" value="Login GET"/> //按鈕,點擊提交 </form> </body> </html>
上面已經把表單的連接指向了login.php,下面就在login.php中編寫一個簡單的php測試。
php代碼以下:
<html> <body> <?php echo "個人第一段 PHP 腳本!"; //輸出"個人第一段 PHP 腳本" $uname=($_GET["username"]); //從GET到的內容中獲取username將其做爲uname變量 $pwd=($_GET["password"]); //從GET到的內容中獲取password將其做爲pwd變量 echo $uname; //輸出uname變量 echo $pwd; //輸出pwd變量 ?> </body> </html>
下面來看看結果
咱們可明顯地看到服務器端的php文件發到客戶端就變樣了,不在有php腳本了,說明在php腳本是在服務器端就解析了的,而後將解析事後的html發送到客戶端。
開啓sql服務/etc/init.d/mysql start
輸入mysql -u root -p,並根據提示輸入密碼,默認密碼爲p@ssw0rd進入MySQL
此處能夠修改本身的密碼:
輸入use mysql,選擇mysql數據庫
輸入update user set password=PASSWORD("20151213") where user='root';
輸入flush privileges;,更新權限
咱們先使用create database Guo;創建一個數據庫;
使用show databases;查看存在的數據庫;
使用use 庫名;使用咱們建立的數據庫:
接着使用create table 表名 (字段設定列表);創建數據表,數據表是數據庫中一個很是重要的對象,一個數據庫中可能包含若干個數據表;
create table Guo(username VARCHAR(20), password VARCHAR(32));
使用show tables查看存在的數據表:
使用insert into 表名 values('值1','值2','值3'...);插入數據;
insert into Guo values('guoyicai','20151213');
使用select * from 表名;查詢表中的數據:
咱們還能夠在MySQL中增長新用戶,使用grant select(insert,update,delete) on 數據庫.* to 用戶名@登陸主機 identified by "密碼";
grant select,insert,update,delete on Guo.* to gyc@localhost identified by "20151213"; #爲數據庫Guo增長一個新用戶gyc,密碼爲20151213,而且賦予select,insert,update,delete四個操做權限
從新編輯login.php,改成如下內容。
<!DOCTYPE html> <html> <body> <?php $uname=($_GET["username"]); $pwd=($_GET["password"]); /* echo $uname; */ $query_str="SELECT * FROM Guo where username='{$uname}' and password='{$pwd}';"; //sql查詢語句 /* echo "<br> {$query_str} <br>";*/ $mysqli = new mysqli("localhost", "gyc", "20151213", "Guo"); //建立一個mysqli對象,面向對象使用數據庫 /* check connection */ if ($mysqli->connect_errno) { printf("Connect failed: %s\n", $mysqli->connect_error); exit(); } /* Select queries return a resultset */ if ($result = $mysqli->query($query_str)) { if ($result->num_rows > 0 ){ //若是符合query_str中的查詢條件,則打印uname echo "<br> Wellcome login Mr/Mrs:{$uname} <br> "; } else { echo "<br> login failed!!!! <br> " ; } /* free result set */ $result->close(); } $mysqli->close(); ?> </body> </html>
結果以下
由於已經知道sql語句是怎麼寫的,因此很容易能夠經過sql注入繞過密碼驗證,
只須要將
SELECT * FROM Guo where username='{$uname}' and password='{$pwd}';
變成
SELECT * FROM Guo where username='' or 1=1;#' and password='{$pwd}';
這樣隨便用戶名均可以繞過密碼驗證
跨站腳本攻擊(Cross Site Scripting),爲不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆。故將跨站腳本攻擊縮寫爲XSS。XSS是一種常常出如今web應用中的計算機安全漏洞,它容許惡意web用戶將代碼植入到提供給其它用戶使用的頁面中。好比這些代碼包括HTML代碼和客戶端腳本。攻擊者利用XSS漏洞旁路掉訪問控制——例如同源策略(same origin policy)。這種類型的漏洞因爲被駭客用來編寫危害性更大的phishing攻擊而變得廣爲人知。
能夠編寫下面這樣的代碼做爲用戶名輸入
<a href="http://www.baidu.com">登陸錯誤,點擊查看幫助</a> ' or 1=1;#
結果以下,若是用戶點擊了,就去咱們給的網址,固然也能夠加入js腳本,直接執行不少操做。
此次實驗對我來講確實有難度,由於沒有這方面的知識,須要本身學html,js,php,mysql,還有web服務器和瀏覽器的工做機制,以及服務器經過sql語句與數據庫通訊的過程。雖然作起來很難,但收穫也很大,經過此次實驗認清了web服務器和瀏覽器到底都在作哪些工做,還學到了幾句sql語句,獲益匪淺。