常見的Web攻擊分為兩類:一是利用Web服務器的漏洞進行攻擊,如CGI緩沖區(qū)溢出,目錄遍歷漏洞利用等攻擊;二是利用網(wǎng)頁自身的安全漏洞進行攻擊,如SQL注入,跨站腳本攻擊等。下面這篇文章主要介紹了PHP安全防護之Web攻擊,需要的朋友可以參考,下面來一起看看吧。
攻擊者把SQL命令插入到Web表單的輸入域或頁面請求的字符串,欺騙服務器執(zhí)行惡意的SQL命令。在某些表單中,用戶輸入的內(nèi)容直接用來構(gòu)造(或者影響)動態(tài)SQL命令,或作為存儲過程的輸入?yún)?shù),這類表單特別容易受到SQL注入式攻擊。
1.某個Web應用有一個登錄頁面,這個登錄頁面控制著用戶是否有權(quán)訪問應用,它要求用戶輸入一個名稱和密碼;
2.登錄頁面中輸入的內(nèi)容將直接用來構(gòu)造動態(tài)的SQL命令,或者直接用作存儲過程的參數(shù);
例如:
$query = 'SELECT * from Users WHERE login = ' . $username . ' AND password = ' . $password;
3.攻擊者在用戶名字和密碼輸入框中輸入'或'1'='1之類的內(nèi)容;
4.用戶輸入的內(nèi)容提交給服務器之后,服務器運行上面的代碼構(gòu)造出查詢用戶的SQL命令,但由于攻擊者輸入的內(nèi)容非常特殊,所以最后得到的SQL命令變成:
SELECT * from Users WHERE login = '' or '1'='1' AND password = '' or '1'='1';
5.服務器執(zhí)行查詢或存儲過程,將用戶輸入的身份信息和服務器中保存的身份信息進行對比;
6.由于SQL命令實際上已被注入式攻擊修改,已經(jīng)不能真正驗證用戶身份,所以系統(tǒng)會錯誤地授權(quán)給攻擊者。
如果攻擊者知道應用會將表單中輸入的內(nèi)容直接用于驗證身份的查詢,他就會嘗試輸入某些特殊的SQL字符串篡改查詢改變其原來的功能,欺騙系統(tǒng)授予訪問權(quán)限。
系統(tǒng)環(huán)境不同,攻擊者可能造成的損害也不同,這主要由應用訪問數(shù)據(jù)庫的安全權(quán)限決定。如果用戶的帳戶具有管理員或其他比較高級的權(quán)限,攻擊者就可能對數(shù)據(jù)庫的表執(zhí)行各種他想要做的操作,包括添加、刪除或更新數(shù)據(jù),甚至可能直接刪除表
攻擊者將惡意代碼注入到網(wǎng)頁上,其他用戶在加載網(wǎng)頁時就會執(zhí)行代碼,攻擊者可能得到包括但不限于更高的權(quán)限(如執(zhí)行一些操作)、私密網(wǎng)頁內(nèi)容、會話和cookie等各種內(nèi)容。這些惡意代碼通常是JavaScript、HTML以及其他客戶端腳本語言。
例如:
?phpecho "歡迎您,".$_GET['name'];
如果傳入一段腳本
script>[code]/script>
那么腳本也會執(zhí)行。用這樣的URL將會執(zhí)行JavaScript的alert函數(shù)彈出一個對話框:
http://localhost/test.php?name=script>alert(123456)/script>
盜用cookie,獲取敏感信息;
利用iframe、frame、XMLHttpRequest或上述Flash等方式,以(被攻擊)用戶的身份執(zhí)行一些管理動作,或執(zhí)行一些一般的如發(fā)微博、加好友、發(fā)私信等操作;
利用可被攻擊的域受到其他域信任的特點,以受信任來源的身份請求一些平時不允許的操作,如進行不當?shù)耐镀被顒樱?/p>
在訪問量極大的一些頁面上的XSS可以攻擊一些小型網(wǎng)站,實現(xiàn)DDoS攻擊的效果。
使用htmlspecialchars函數(shù)將特殊字符轉(zhuǎn)換成HTML編碼,過濾輸出的變量
攻擊者偽造目標用戶的HTTP請求,然后此請求發(fā)送到有CSRF漏洞的網(wǎng)站,網(wǎng)站執(zhí)行此請求后,引發(fā)跨站請求偽造攻擊。攻擊者利用隱蔽的HTTP連接,讓目標用戶在不注意的情況下單擊這個鏈接,由于是用戶自己點擊的,而他又是合法用戶擁有合法權(quán)限,所以目標用戶能夠在網(wǎng)站內(nèi)執(zhí)行特定的HTTP鏈接,從而達到攻擊者的目的。
它與XSS的攻擊方法不同,XSS利用漏洞影響站點內(nèi)的用戶,攻擊目標是同一站點內(nèi)的用戶者,而CSRF 通過偽裝成受害用戶發(fā)送惡意請求來影響Web系統(tǒng)中受害用戶的利益。
某個購物網(wǎng)站購買商品時,采用http://www.shop.com/buy.php?item=watchnum=100,item參數(shù)確定要購買什么物品,num參數(shù)確定要購買數(shù)量,如果攻擊者以隱藏的方式發(fā)送給目標用戶鏈接
,那么如果目標用戶不小心訪問以后,購買的數(shù)量就成了100個
這種攻擊方式的核心要點就是讓合法用戶使用攻擊者預先設定的session id來訪問被攻擊的應用程序,一旦用戶的會話ID被成功固定,攻擊者就可以通過此session id來冒充用戶訪問應用程序。
1.定期更改session id
session_regenerate_id(TRUE);//刪除舊的session文件,每次都會產(chǎn)生一個新的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傳遞隱藏參數(shù)
$sid = md5(uniqid(rand()), TRUE)); $_SESSION["sid"] = $sid;//攻擊者雖然能獲取session數(shù)據(jù),但是無法得知$sid的值,只要檢查sid的值,就可以確認當前頁面是否是web程序自己調(diào)用的
會話劫持是指攻擊者利用各種手段來獲取目標用戶的session id。一旦獲取到session id,那么攻擊者可以利用目標用戶的身份來登錄網(wǎng)站,獲取目標用戶的操作權(quán)限。
文件上傳漏洞指攻擊者利用程序缺陷繞過系統(tǒng)對文件的驗證與處理策略將惡意代碼上傳到服務器并獲得執(zhí)行服務器端命令的能力。
以上就是php常見的網(wǎng)絡攻擊及防御方法的詳細內(nèi)容,更多關于php攻擊及防御的資料請關注腳本之家其它相關文章!