這裏只是講解前端須要考慮的安全問題,後端和網絡上的安全問題這裏不作講解javascript
web網頁中前端開發中須要注意的幾個地方css
下面經過具體的漏洞類型,進行分析html
跨站腳本攻擊(英語:Cross-site scripting,因簡稱與css衝突,無奈簡稱爲:XSS)是一種網站應用程式的安全漏洞攻擊,是代碼注入的一種。
它容許惡意使用者將代碼注入到網頁上執行,其餘使用者在觀看網頁時就會受到攻擊,從而能夠達到攻擊者盜取用戶信息或其餘侵犯用戶安全隱私的目的。前端
XSS攻擊方式的幾種常見類型java
非持久型 XSS 漏洞,也叫反射型 XSS 漏洞,通常是經過給別人發送帶有惡意腳本代碼參數的 URL,當 URL 地址被打開時,特有的惡意代碼參數被 HTML 解析、執行。web
<div><script>alert(1)</script></div>
,這樣頁面中就憑空多了一段可執行腳本<!-- http://www.domain.com?name=<script>alert(1)</script> -->
<div>{{name}}</div>
複製代碼
如何防護算法
function escape(str) {
str = str.replace(/&/g, '&')
str = str.replace(/</g, '<')
str = str.replace(/>/g, '>')
str = str.replace(/"/g, '&quto;')
str = str.replace(/'/g, ''')
str = str.replace(/`/g, '`')
str = str.replace(/\//g, '/')
return str
}
複製代碼
經過轉義能夠將攻擊代碼 變成數據庫
escape('<script>alert(1)</script>')
// -> <script>alert(1)</script>
複製代碼
var xss = require('xss')
var html = xss('<h1 id="title">XSS Demo</h1><script>alert("xss");</script>')
console.log(html)
// -> <h1>XSS Demo</h1><script>alert("xss");</script>
複製代碼
持久型 XSS 漏洞,也被稱爲存儲型 XSS 漏洞,通常存在於 Form 表單提交等交互功能,如發帖留言,提交文本信息等,黑客利用的 XSS 漏洞,將內容經正常功能提交進入數據庫持久保存,當前端頁面得到後端從數據庫中讀出的注入代碼時,剛好將其渲染執行。後端
持久型 XSS 攻擊成功須要同時知足如下幾個條件:瀏覽器
如何防護
內容安全策略 (CSP) 是一個額外的安全層,用於檢測並削弱某些特定類型的攻擊,包括跨站腳本 (XSS) 和數據注入攻擊等。不管是數據盜取、網站內容污染仍是散發惡意軟件,這些攻擊都是主要的手段。咱們能夠經過 CSP 來儘可能減小 XSS 攻擊。CSP 本質上也是創建白名單,規定了瀏覽器只可以執行特定來源的代碼。
一般能夠經過 HTTP Header 中的 Content-Security-Policy 來開啓 CSP
Content-Security-Policy: default-src ‘self’
複製代碼
Content-Security-Policy: img-src https://*
複製代碼
跨站請求僞造(英語:Cross-site request forgery),也被稱爲 one-click attack 或者 session riding,一般縮寫爲 CSRF 或者 XSRF, 是一種挾制用戶在當前已登陸的 Web 應用程序上執行非本意的操做的攻擊方法。[1] 跟跨網站指令碼(XSS)相比,XSS 利用的是用戶對指定網站的信任,CSRF 利用的是網站對用戶網頁瀏覽器的信任
CSRF 就是利用用戶的登陸態發起惡意請求, 攻擊成功須要同時知足如下幾個條件:
- 用戶已經登陸了站點 A,並在本地記錄了 cookie
- 在用戶沒有登出站點 A 的狀況下(也就是 cookie 生效的狀況下),訪問了惡意攻擊者提供的引誘危險站點 B (B 站點要求訪問站點A)。
- 站點 A 沒有作任何 CSRF 防護
<img src="http://www.domain.com/xxx?comment='attack'" />
複製代碼
若是接口是 Post 提交的,就相對麻煩點,須要用表單來提交接口
<form action="http://www.domain.com/xxx" id="CSRF" method="post">
<input name="comment" value="attack" type="hidden" />
</form>
複製代碼
防護辦法
服務器下發一個隨機 Token(算法不能複雜),每次發起請求時將 Token 攜帶上,服務器驗證 Token 是否有效。
密碼安全更多的是後端數據庫的安全,其實前端也能夠作些事情,
一般使用驗證碼增長延時或者限制嘗試次數的方式。而且一旦用戶輸入了錯誤的密碼,也不能直接提示用戶輸錯密碼,而應該提示帳號或密碼錯誤。
參考:
yuchengkai.cn/docs/fronte…
zoumiaojiang.com/article/com…
不足之處還望海涵,請大神多多指教