目錄javascript
理解HTML,學會Web前端、Web後端和數據庫編程及SQL注入、XSS攻擊測試
教程php
使用service apache2 start
啓動Apache。使用netstat -aptn
查看端口信息,看到80端口被Apache2監聽,啓動成功
html
若是有其餘應用有端口衝突,能夠修改ports.conf前端
對Apache進行測試:打開網頁127.0.0.1:80
可打開上次實驗克隆的網頁,在Apache的工做目錄下/var/www/html
編輯一個測試文件,咱們就能夠只在在網頁打開看到了
java
編寫一個簡單網頁,包含一個表單,輸出用戶名、密碼而後提交,提交以後會跳轉到「login.php」mysql
在Apache的工做目錄下新建一個html文件並經過瀏覽器打開
linux
GET | POST |
---|---|
可被緩存 | 不會被緩存 |
保留在瀏覽器歷史記錄中 | 不會保留在瀏覽器歷史記錄中 |
可被收藏爲書籤 | 不能被收藏爲書籤 |
對數據有長度限制 | 對數據沒有長度限制 |
function submit() { if(document.form.password.value=="" || document.form.username.value=="") { alert("please input your name!"); window.location.href="login.html" } else form.submit(); }
前端的設計告一段落,接下來就要處理咱們從網頁上提交的數據了,這裏咱們使用MySQL來處理數據git
啓動MySQL:直接運行/etc/init.d/mysql start
開啓MySQL服務就能夠
web
登陸數據庫:mysql -u root -p
,密碼爲p@ssw0rd
,直接複製粘貼進去就行
sql
用show databases;
查看數據庫基本信息注意這裏每一個sql語句要以分號爲結尾
輸入use mysql;選擇使用mysql這個數據庫
輸入select user, password, host from user;查看當前用戶信息
更新權限flush privileges;
退出quit;
再使用新密碼從新登陸mysql -u root -p
,用咱們更改修改的密碼就能夠了
使用create databases `數據庫名`;
建立一個名爲tky的數據庫,使用show databases;
能夠看到建立成功
使用咱們剛剛建立的數據庫use tky
create table 表名 (字段1,字段2 ···);
,建立數據表。
create table user (username VARCHAR(20),password VARCHAR(20))
;insert into 表名 values('數值1''數值2''···');
添加數據
insert into user values('20165230','5230');
向表中username password兩個字段插入數據,即用戶名爲20165230,密碼爲5230建立一個新用戶便於後面的實驗,給新用戶提供全部的權限grant all privileges on 數據庫名.* to 用戶名@localhost identified by '密碼';
,更新權限flush privileges;
並退出
重複上面的步驟,建數據庫、建表、插入數據。值得注意的是,咱們在以前只爲新用戶的某個具體的數據庫分配了權限,所以這裏只能建立名字和前面同樣的數據庫,若是想要建立新的數據庫,能夠按照這裏的[教程]先建立用戶、建立數據庫再分配權限。
sudo apt-get install php
安裝在工做目錄下編寫測試文件
<?php include($_GET["a"]); ?>
瀏覽器打開 127.0.0.1:80/test.php?a=/etc/passwd可看到/etc/passwd文件的內容,以下圖所示
注:若是想這裏測試成功,首先須要保證apache成功開啓(service apache2 start)
編寫獲取表單數據,myspli的參數分別爲本機IP地址、用戶名、密碼、數據庫名
在網頁輸入同戶名和密碼,能夠看到成功鏈接到數據庫
SQL注入漏洞是指在Web應用對後臺數據庫查詢語句處理存在的安全漏洞。也就是,在輸入字符串中嵌入SQL指令,在設計程序中忽略對可能構成攻擊的特殊字符串的檢查。後臺數據庫將其認做正常SQL指令後正常執行,可能實現對後臺數據庫進行各類操做,甚至形成破壞後臺數據庫等嚴重後果。
輸入框中鍵入'or 1=1 --
而且提交,能夠看到鏈接成功。這是由於此時查詢語句爲select * from users where name='' or 1=1 --'and password='1';
而「--」在MySQL表明註釋,查詢語句實際爲select * from users where name='' or 1=1
1=1爲永真式,則這個條件恆成立,所以數據庫不會報錯
攻擊成功!
if ($result = $mysqli->query($query_str))
是不容許輸入多條查詢語句的,現實生活中也應該是不容許的,但這裏爲了實驗咱們須要代碼能容許輸入多條查詢語句。if ($result = $mysqli->multi_query($query_str))
,在登陸界面輸入';insert into user values('tky','tky');--
能夠看到雖然登陸失敗,但咱們已經在表中插入了一個新用戶
這時,咱們要將代碼改回原來的,再使用新的用戶名和密碼就能夠登陸了
咱們平常接觸的網頁都是不容許輸入多條查詢語句的,並且爲了不網頁遭受SQL注入,在編寫後端php網頁的時候就要注意將查詢語句分開,或者對輸入的字符串進行處理,去掉註釋符等特殊符號,這樣才能使網頁更安全。
XSS就是在網站任何接受正常文本輸入的地方,輸入Javascript腳本,並讓腳本執行。
<img src="login.png " />
,讀取/var/www/html目錄下的圖片此次實驗在本來的網頁編程基礎上增長了不少如php、數據庫鏈接的功能,讓咱們直觀地體會到一個網站運行的過程當中參數的傳遞和應用,更明白網頁攻擊的原理與過程。作此次實驗的過程當中想到了不少以前使用過的漏洞,要想作一個徹底安全的網頁要考慮不少,數據庫參數的鏈接、字符串等都要進行一些特殊的處理才能真正達到安全的須要。