參考:html
Web安全知多少github
cross-site script.跨站腳本,XSS。web
瀏覽器端運行非法的 HTMl 或 script 標籤進行的一種攻擊。sql
可能形成的影響:shell
原理:惡意攻擊者往 Web 頁面裏插入惡意可執行網頁腳本代碼,當用戶瀏覽該頁之時,嵌入其中 Web 裏面的腳本代碼會被執行,能夠達到攻擊者盜取用戶信息或其餘侵犯用戶安全隱私的目的。數據庫
非持久性XSS。經過發送惡意腳本代碼參數的URL,URL地址被打開的時候,特有的惡意代碼參數被解析執行。後端
特色:跨域
防止:
Web渲染的全部內容和數據都必須來自服務端
不要從URL
,document.referrer
,document.forms
等DOMAPI直接獲取數據渲染。
不要使用eval
,document.write()
,innerHTML
,document.createElement()
等可執行字符串的方式
對字段作encodeURI
處理
轉義的目的是將一些構成 HTML 標籤的元素轉義,好比
<
,>
,空格
等,轉義成<
,>
,等顯示轉義字符
持久性XSS(存儲性XSS)
通常用於表單提交的功能,利用XSS將代碼內容注入數據庫持久存儲,前端頁面得到從數據庫中讀出的注入代碼時,將其渲染執行。
須要條件:
特色:
Content-Security-Policy 。經過配置規則,明確告訴瀏覽器哪些外部資源能夠加載和執行。(CSP)
例子:
Content-Security-Policy: default-src 'self'
Content-Security-Policy: img-src https://*
Content-Security-Policy: child-src 'none'
轉義字符。對於輸入輸出的內容進行轉義,引號,尖括號斜槓這些。何內容寫到頁面以前都必須加以encode
,避免把 html tag
弄出來。
HttpOnly Cookie,預防XSS攻擊竊取用戶cookie最有效的防護手段。設置了 HttpOnly 屬性的 cookie 不能使用 JavaScript 經由 Document.cookie
屬性、XMLHttpRequest
和 Request
APIs 進行訪問。
Cross site Request Forgery,跨站請求僞造。利用用戶已登陸的身份,在用戶不知情的狀況下,以用戶名義完成非法操做。
完成CSRF攻擊須要的條件:
就是經過把 SQL
命令插入到 Web
表單遞交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL
命令。
例如,咱們以前預想的SQL 語句是:
SELECT * FROM user WHERE username='admin' AND psw='password'而後,惡意攻擊者輸入的用戶名是
admin' --
結果 SQL 語句變成了以下形式:
SELECT * FROM user WHERE username='admin' --' AND psw='xxxx'在 SQL 中,
' --
是閉合和註釋的意思,-- 是註釋後面的內容的意思,因此查詢語句就變成了:SELECT * FROM user WHERE username='admin'而後密碼隨意輸入均可以,就能夠登入系統了,這就是一個SQL注入
包含如下過程:
SQL 注入的本質是數據和代碼未分離,數據看成代碼來執行。
危害:
本質上是一種視覺欺騙。將須要攻擊的網站內嵌到本身的網頁中,將iframe設置爲透明,再透出一個按鈕誘導點擊。
特色:
原理:登陸A網站後,被誘導打開第三方的網站,第三方的網站經過 iframe 引入了A網站頁面的內容,在第三方的網站點擊某個按鈕,實際上觸發的是A網站的按鈕。
例如:在已經登陸的網站,誘導點擊某按鈕,可能實際上就是關注了某人。
X-FRAME-OPTIONS。是一個HTTP響應頭,能夠設置不一樣的值防護 iframe 的嵌套劫持點擊。
JS 手動防護,當經過 iframe 的方式加載頁面的時候,直接不顯示任何內容。(window.self)
if (self != top) { alert('在iframe中'); }
<hr/ >
藉助未驗證的URL跳轉,將應用引導到不安全的第三方區域,致使的安全問題。
其原理是構建惡意連接(連接須要進行假裝,儘量迷惑),發在QQ羣或者是瀏覽量多的貼吧/論壇中。安全意識低的用戶點擊後,通過服務器或者瀏覽器解析後,跳到惡意的網站中。
如:
http://gate.baidu.com/index?act=go&url=http://t.cn/RVTatrd http://qt.qq.com/safecheck.html?flag=1&url=http://t.cn/RVTatrd
實現方式:
SQL注入是針對數據庫的,而OS命令注入則是針對操做系統的。OS命令經過Web應用,執行非法的操做系統命令達到攻擊的目的。
命令注入能夠向shell發送命令,讓Windows或者Linux系統的命令行啓動程序。經過命令注入可執行系統上安裝的各類程序。
例子:
// 以 Node.js 爲例,假如在接口中須要從 github 下載用戶指定的 repo const exec = require('mz/child_process').exec; let params = {/* 用戶輸入的參數 */}; exec(`git clone ${params.repo} /some/path`); 若是 params.repo 傳入的是 https://github.com/admin/admin.github.io.git 確實能從指定的 git repo 上下載到想要的代碼。 可是若是 params.repo 傳入的是 https://github.com/xx/xx.git && rm -rf /* && 剛好你的服務是用 root 權限起的就糟糕了。
<hr/ >
Distributed Denial of Service,分佈式拒絕服務。利用大量的請求形成資源過載,致使服務不可用。
其原理都是形成資源過載,致使服務不可用
網絡層DDoS和應用層DDos