開發網站,常見的網站安全問題有下面這些。他們分別是:SQL注入、XSS、偽造腳本攻擊、DDos,這里面中SQL注入與DDos是目前被用作攻擊手段最多的攻擊方法,下面一起看一下SQL注入,XSS,偽造腳本攻擊,DDos等網站安全問題。
一、SQL注入
它利用網站的漏洞,使用一些特別的SQL語句,執行具有破壞性的SQL語句。例如:
SELECT COUNT(*) FROM user WHERE username='cg' AND password='123456\' OR 1=1'; (1-1)
當用戶在登錄頁面填寫username為cg,密碼輸入框填寫123456\' OR 1=1時,就產生了(1-1)中的SQL語句。它雖然提供的是錯誤的用戶信息,卻能夠登錄網站。
在PHP中,要防止SQL注入,使用mysql_real_escape_string($string)轉義用于SQL語句中的字符串即可。mysql_escape_string($string)具有同樣的作用,區別在于mysql_real_escape_string接受的是一個連接句柄、并且根據當前字符集轉義字符串。
如果使用的是PDO之類的與mysql交互的方法,使用綁定參數即可避免SQL注入。
這些方法的實質,是將SQL語句中的特殊字符轉義,避免它們破壞SQL語句構建新的具有破壞性的SQL語句。這些特殊字符主要是指單雙引號。
二、XSS
XSS,中文名叫跨站腳本攻擊。通過在網頁中嵌入一段惡意JS腳本來實現攻擊目的。
<form action="server.php" method="post">
<input type="text" name="content" />
<input type="submit" value="Submit" />
</form>
(2-1)
惡意用戶在表單中輸入下面內容:
<script type='text/javascript'>
alert('Hello,world!');
</script>
(2-2)
若處理表單提交的服務端代碼server.php對用戶輸入原樣接收,(2-2)代碼會以合法的能執行的JS代碼存儲起來。當包含(2-2)代碼的頁面被打開的時候,這段JS代碼就會執行。
這段JS代碼無破壞性,僅僅演示了發起XSS攻擊的最基本方法。
防范XSS攻擊,只需對尖括號(<、>)、單雙引號轉義。
三、偽造腳本攻擊
它也是利用JS進行攻擊。舉一個簡單的例子。在偽造腳本攻擊中,存在三個因素:惡意站點A,安全站點B,用戶C。用戶C訪問安全站點B,并且登錄。在沒有退出登錄的情況下,用戶C訪問了站點A。站點A提供了一鏈接
http://siteB.com?giveMoneyTo=1234567&money=10000 (3-1)
giveMoneyTo=1234567&money=10000表示向帳號123456轉賬10000。(3-1)可能會以被模糊處理后以正常URL出現。一旦用戶C點擊該鏈接,站點B會認為是用戶C發出的合法轉賬請求,執行轉賬操作。
防范這種偽造攻擊,在瀏覽器設置httponly,在站點需使用更安全的請求驗證。
四、DDos
DDos,中文名叫分布式拒絕服務攻擊。DDos,通過向目標網站發送大量的訪問請求,遠遠超過目標網站能夠承受的訪問請求,導致目標網站癱瘓或拒絕服務。
發起攻擊使用的流量,可以來自攻擊者捕獲的大量肉雞(被害電腦),也可以來自大量的代理IP。
由于硬件技術的高度發展,舊的單純依靠大流量拖垮目標網站的攻擊方法已經難以湊效。目前流行的攻擊方式分為三種。
(A)利用TCP/IP發起攻擊。
這種攻擊利用了TCP/IP協議,客戶端和服務器三次握手的原理。
第一次握手:客戶端向服務器發送請求。
第二次握手:服務器回應客戶端請求,告訴客戶端它已經接受請求、準備發送數據。
第三次握手:客戶端向服務器發送數據,告知服務器它已經做好接收數據的準備。
在第三次握手中,攻擊者控制客戶端不回應服務器,服務器不斷向這些未回應的客戶端發送數據。隨著不回應服務器的客戶端越來越多,超出了服務器能夠提供服務的客戶端數目,新的正常的客戶端請求不會得到回應。
(B)利用DNS解析發起攻擊。
使用大量并不存在的域名向目標網站發起請求,DNS服務器會試圖解析這些虛假域名,層層上報,直達全球那幾臺根DNS解析服務器。
(C)偽裝正常用戶干擾目標網站正常流程迫使目標網站誤殺真正的正常用戶發起攻擊。
攻擊者在電商網站下許多單后,遲遲不付款;超過訂單鎖定時間后,又下許多訂單。這將會使網站的大量訂單被鎖定,正常用戶無法下單。