php安全入門

參考網址:php

https://www.cnblogs.com/luyucheng/p/6234524.htmlhtml

https://blog.csdn.net/luyaran/article/details/78132340web

https://blog.csdn.net/baochao95/article/details/52025180sql

https://www.cnblogs.com/luyucheng/p/6234524.htmlshell

SQL注入攻擊(SQL Injection)數據庫

攻擊者把SQL命令插入到Web表單的輸入域或頁面請求的字符串,欺騙服務器執行惡意的SQL命令。在某些表單中,用戶輸入的內容直接用來構造(或者影響)動態SQL命令,或做爲存儲過程的輸入參數,這類表單特別容易受到SQL注入式攻擊。跨域

常見的SQL注入式攻擊過程類如:
瀏覽器

1.某個Web應用有一個登陸頁面,這個登陸頁面控制着用戶是否有權訪問應用,它要求用戶輸入一個名稱和密碼;
安全

2.登陸頁面中輸入的內容將直接用來構造動態的SQL命令,或者直接用做存儲過程的參數;
服務器

例如:

$query = 'SELECT * from Users WHERE login = ' . $username . ' AND password = ' . $password;

3.攻擊者在用戶名字和密碼輸入框中輸入'或'1'='1之類的內容;

4.用戶輸入的內容提交給服務器以後,服務器運行上面的代碼構造出查詢用戶的SQL命令,但因爲攻擊者輸入的內容很是特殊,因此最後獲得的SQL命令變成:

SELECT * from Users WHERE login = '' or '1'='1' AND password = '' or '1'='1';

5.服務器執行查詢或存儲過程,將用戶輸入的身份信息和服務器中保存的身份信息進行對比;

6.因爲SQL命令實際上已被注入式攻擊修改,已經不能真正驗證用戶身份,因此係統會錯誤地受權給攻擊者。

若是攻擊者知道應用會將表單中輸入的內容直接用於驗證身份的查詢,他就會嘗試輸入某些特殊的SQL字符串篡改查詢改變其原來的功能,欺騙系統授予訪問權限。

系統環境不一樣,攻擊者可能形成的損害也不一樣,這主要由應用訪問數據庫的安全權限決定。若是用戶的賬戶具備管理員或其餘比較高級的權限,攻擊者就可能對數據庫的表執行各類他想要作的操做,包括添加、刪除或更新數據,甚至可能直接刪除表

防範方法:

      1.檢查變量數據類型和格式

      2.過濾特殊符號

      3.綁定變量,使用預編譯語句

跨網站腳本攻擊(Cross Site Scripting, XSS)

攻擊者將惡意代碼注入到網頁上,其餘用戶在加載網頁時就會執行代碼,攻擊者可能獲得包括但不限於更高的權限(如執行一些操做)、私密網頁內容、會話和cookie等各類內容。這些惡意代碼一般是JavaScript、HTML以及其餘客戶端腳本語言。
例如:

<?php
echo "歡迎您,".$_GET['name'];

若是傳入一段腳本<script>[code]</script> ,那麼腳本也會執行。用這樣的URL將會執行JavaScript的alert函數彈出一個對話框:http://localhost/test.php?name=<script>alert(123456)</script>

經常使用的攻擊手段有:

盜用cookie,獲取敏感信息;

利用iframe、frame、XMLHttpRequest或上述Flash等方式,以(被攻擊)用戶的身份執行一些管理動做,或執行一些通常的如發微博、加好友、發私信等操做;

利用可被攻擊的域受到其餘域信任的特色,以受信任來源的身份請求一些平時不容許的操做,如進行不當的投票活動;

在訪問量極大的一些頁面上的XSS能夠攻擊一些小型網站,實現DDoS攻擊的效果。

防範方法:使用htmlspecialchars函數將特殊字符轉換成HTML編碼,過濾輸出的變量

跨網站請求僞造攻擊(Cross Site Request Forgeries, CSRF)

攻擊者僞造目標用戶的HTTP請求,而後此請求發送到有CSRF漏洞的網站,網站執行此請求後,引起跨站請求僞造攻擊。攻擊者利用隱蔽的HTTP鏈接,讓目標用戶在不注意的狀況下單擊這個連接,因爲是用戶本身點擊的,而他又是合法用戶擁有合法權限,因此目標用戶可以在網站內執行特定的HTTP連接,從而達到攻擊者的目的。

它與XSS的攻擊方法不一樣,XSS利用漏洞影響站點內的用戶,攻擊目標是同一站點內的用戶者,而CSRF 經過假裝成受害用戶發送惡意請求來影響Web系統中受害用戶的利益。

例如:

某個購物網站購買商品時,採用http://www.shop.com/buy.php?item=watch&num=100,item參數肯定要購買什麼物品,num參數肯定要購買數量,若是攻擊者以隱藏的方式發送給目標用戶連接
,那麼若是目標用戶不當心訪問之後,購買的數量就成了100個

防範方法:

      一、檢查網頁的來源

      二、檢查內置的隱藏變量

      三、使用POST,不要使用GET,處理變量也不要直接使用$_REQUEST

Session固定攻擊(Session Fixation)

這種攻擊方式的核心要點就是讓合法用戶使用攻擊者預先設定的session id來訪問被攻擊的應用程序,一旦用戶的會話ID被成功固定,攻擊者就能夠經過此session id來冒充用戶訪問應用程序。

例如:

1.攻擊者訪問網站http:///www.bank.com,獲取他本身的session id,如:SID=123;

2.攻擊者給目標用戶發送連接,並帶上本身的session id,如:http:///www.bank.com/?SID=123;

3.目標用戶點擊了http:///www.bank.com/?SID=123,像往常同樣,輸入本身的用戶名、密碼登陸到網站;

4.因爲服務器的session id不改變,如今攻擊者點擊http:///www.bank.com/?SID=123,他就擁有了目標用戶的身份,能夠隨心所欲了。

防範方法:

1.按期更改session id

session_regenerate_id(TRUE);//刪除舊的session文件,每次都會產生一個新的session id。默認false,保留舊的session

2.更改session的名稱

session的默認名稱是PHPSESSID,此變量會保存在cookie中,若是攻擊者不抓包分析,就不能猜到這個名稱,阻擋部分攻擊

session_name("mysessionid");

3.關閉透明化session id

透明化session id指當瀏覽器中的http請求沒有使用cookie來制定session id時,sessioin id使用連接來傳遞

int_set("session.use_trans_sid", 0);

4.只從cookie檢查session id

int_set("session.use_cookies", 1);//表示使用cookies存放session id
int_set("session.use_only_cookies", 1);//表示只使用cookies存放session id

5.使用URL傳遞隱藏參數

$sid = md5(uniqid(rand()), TRUE));
$_SESSION["sid"] = $sid;//攻擊者雖然能獲取session數據,可是沒法得知$sid的值,只要檢查sid的值,就能夠確認當前頁面是不是web程序本身調用的

Session劫持攻擊(Session Hijacking)

會話劫持是指攻擊者利用各類手段來獲取目標用戶的session id。一旦獲取到session id,那麼攻擊者能夠利用目標用戶的身份來登陸網站,獲取目標用戶的操做權限。

攻擊者獲取目標用戶session id的方法:

1.暴力破解:嘗試各類session id,直到破解爲止;

2.計算:若是session id使用非隨機的方式產生,那麼就有可能計算出來;

3.竊取:使用網絡截獲,xss攻擊等方法得到

防範方法:

      1.按期更改session id

      2.更改session的名稱

      3.關閉透明化session id

      4.設置HttpOnly。經過設置Cookie的HttpOnly爲true,能夠防止客戶端腳本訪問這個Cookie,從而有效的防止XSS攻擊。

文件上傳漏洞攻擊(File Upload Attack)

文件上傳漏洞指攻擊者利用程序缺陷繞過系統對文件的驗證與處理策略將惡意代碼上傳到服務器並得到執行服務器端命令的能力。

經常使用的攻擊手段有:

上傳Web腳本代碼,Web容器解釋執行上傳的惡意腳本;

上傳Flash跨域策略文件crossdomain.xml,修改訪問權限(其餘策略文件利用方式相似);

上傳病毒、木馬文件,誘騙用戶和管理員下載執行;

上傳包含腳本的圖片,某些瀏覽器的低級版本會執行該腳本,用於釣魚和欺詐。

總的來講,利用的上傳文件要麼具有可執行能力(惡意代碼),要麼具有影響服務器行爲的能力(配置文件)。

防範方法:

      1.文件上傳的目錄設置爲不可執行;

      2.判斷文件類型,設置白名單。對於圖片的處理,可使用壓縮函數或者resize函數,在處理圖片的同時破壞圖片中可能包含的HTML代碼;

      3.使用隨機數改寫文件名和文件路徑:一個是上傳後沒法訪問;再來就是像shell.php.rar.rar和crossdomain.xml這種文件,都將由於重命名而沒法攻擊;

      4.單獨設置文件服務器的域名:因爲瀏覽器同源策略的關係,一系列客戶端攻擊將失效,好比上傳crossdomain.xml、上傳包含Javascript的XSS利用等問題將獲得解決。

參考資料:

http://os.51cto.com/art/201204/328938.htm

https://www.zhihu.com/question/22953267

http://wt7315.blog.51cto.com/10319657/1865580

http://www.plhwin.com/2014/06/13/web-security-sql/

總結

以上就是關於PHP安全防禦之Web攻擊的所有內容了,但願本文的內容對你們的學習或者工做能帶來必定的幫助,若是有疑問你們能夠留言交流。

相關文章
相關標籤/搜索