1. 程式人生 > >Web站點如何防範XSS、CSRF、SQL注入攻擊

Web站點如何防範XSS、CSRF、SQL注入攻擊

XSS跨站指令碼攻擊

XSS跨站指令碼攻擊指攻擊者在網頁中嵌入客戶端指令碼(例如JavaScript),當用戶瀏覽此網頁時,指令碼就會在使用者的瀏覽器上執行,從而達到攻擊者的目的,比如獲取使用者的Cookie,導航到惡意網站,攜帶木馬等。

如何防止XSS跨站指令碼攻擊:

原則:不相信使用者輸入的資料

  1. 將重要的cookie標記為http only,這樣的話Javascript 中的document.cookie語句就不能獲取到cookie了
  2. 只允許使用者輸入我們期望的資料。例如:年齡的textbox中,只允許使用者輸入數字,而數字之外的字元都過濾掉
  3. 對資料進行Html Encode 處理。< 轉化為 &lt;、> 轉化為 &gt;、& 轉化為 &amp;、' 轉化為 &#039;、" 轉化為 &quot;、空格 轉化為 &nbsp;
  4. 過濾或移除特殊的Html標籤。例如:<script>、<iframe>、&lt; for <、&gt; for >、&quot for
  5. 過濾JavaScript 事件的標籤。例如 “onclick=”、”onfocus” 等等
    很多瀏覽器都加入了安全機制來過濾XSS

    注意:攻擊程式碼不一定在<script></script>

CSRF跨站請求偽造

CSRF(XSRF)儘管聽起來很想XSS跨站指令碼攻擊,但是它於XSS完全不同。XSS是利用站點內的信任使用者,而CSRF則是通過偽裝來自受信任使用者的請求來利用受信任的站點。與XSS相比,CSRF攻擊不大流行和難以防範,所以比XSS更具危險性。

如何防止CSRF跨站請求偽造:

  1. 對於web站點,將持久化的授權方法(例如cookie或者HTTP授權)切換為瞬時的授權方法(在每個form中提供隱藏field)。
  2. “雙提交”cookie。此方法只工作於Ajax請求,但它能夠作為無需改變大量form的全域性修正方法。如果某個授權的cookie在form post之前正被JavaScript程式碼讀取,那麼限制跨域規則將被應用。什麼叫限制跨域規則呢?限制跨域規則就是:如果伺服器需要在Post請求體或者URL中包含授權cookie的請求,那麼這個請求必須來自於受信任的域,因為其它域是不能從信任域讀取cookie的。上面那個例子的受信任域就是銀行網站的某個域,而Mallory發給Bob的連結不是受信任的域。
  3. 使用Post代替Get。Post方式不會在web伺服器和代理伺服器日誌中留下資料尾巴,然而Get方式卻會留下資料尾巴。
  4. 以上三點都是正對web站點的防禦手段,第4點是從使用者的角度的防禦手段。通過在瀏覽其它站點前登出站點或者在瀏覽器會話結束後清理瀏覽器的cookie來防止CSRF攻擊。

SQL注入

所謂SQL注入,就是通過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的SQL命令。

如何防止SQL注入:

  1. 永遠不要信任使用者的輸入。對使用者的輸入進行校驗,可以通過正則表示式,或限制長度;對單引號和雙”-“進行轉換等。
  2. 永遠不要使用動態拼裝sql,可以使用引數化的sql或者直接使用儲存過程進行資料查詢存取
  3. 永遠不要使用管理員許可權的資料庫連線,為每個應用使用單獨的許可權有限的資料庫連線
  4. 不要把機密資訊直接存放,加密或者hash掉密碼和敏感的資訊
  5. 應用的異常資訊應該給出儘可能少的提示,最好使用自定義的錯誤資訊對原始錯誤資訊進行包裝