Scripting能幹什麼(危害)javascript
分類html
url參數直接注入的方式攻擊前端
存儲到數據庫後讀取後攻擊java
XSS攻擊的注入點算法
<div> #{content} </div>
這種是經過往HTML標籤之間插入script標籤的方式進行邏輯操縱從而引發的攻擊方式。 防護:能夠經過轉譯標籤標記進行防護。轉義
<
成<
和>
成>
sql
<img src="#{image}"/> <img src="1" onerror="alert(1)"/>
如上代碼,經過提早關閉元素屬性的方式進行的XSS攻擊。chrome
<script> var data = "#{data}"; var data = "hello"; alert(1);""; </script>
如上代碼,經過在js代碼中插入代碼的方式進行的XSS攻擊。 防護:能夠經過轉譯標籤標記進行防護。轉義
\
或者轉換成json(推薦)。數據庫
黑名單進行過濾,就是用正則去匹配不合法的html標籤,而後進行內容過濾,優勢是開發簡單,缺點是可能過濾不全存在隱患。 白名單進行過濾,就是規定全部容許的標籤及屬性的範圍域,優勢是內容過濾可靠,安全,但因爲事先須要將內容構建成DOM樹(推薦cheerio庫),所以效率可能會有必定影響。(第三方過濾模塊:js-xss)json
防護小結:後端
.set('X-XSS-Protection', 1)
,但這種策略防護有限。var escapeHtml = function (str) { if (!str) return ''; str = str.replace(/</g, '<'); str = str.replace(/>/g, '>'); return str; }; var escapeHtmlProperty = function (str) { if (!str) return ''; str = str.replace(/"/g, '&quto;'); str = str.replace(/'/g, '''); str = str.replace(/ /g,' '); return str; };
CSP(Content Security Policy)
child-src connect-src default-src --> <host-source> <scheme-source> 'self' font-src frame-src img-src --> 'unsafe-inline' 'unsafe-eval" 'none' manifest-src media-src object-src --> 'nonce-<base64-value>' <hash-source> script-src style-src worker-src 'strict-dynamic' 具體參見MDN上CSP的文檔信息
XSS與CSRF的區別
CSRF攻擊的原理
CSRF的危害
CSRF的防護
經過驗證 referer 請求頭是否來自可信任網站或本網站,從而禁止來自第三方網站的請求。
PS:referer 應該是referrer,這個單詞是爲數很少的單詞錯誤。
cookie特徵
以上特徵對應chrome中的cookie的各類參數
cookie的做用
cookie - 登陸用戶憑證管理(判斷用戶是不是在登陸態)
這種方案就是當用戶登入成功以後在cookie中存儲用戶id,當用戶在以後的請求中判斷當前用戶。可是這種方案容易被篡改用戶I。
這種方案不只在cookie存儲用戶id,而且另外存儲一個由服務端根據密鑰和用戶id生成的惟一用戶簽名。於這種簽名都是不可逆的,當用戶在以後的請求中都帶上這兩個信息,由服務端根據用戶id從新生成簽名並與請求帶過來的簽名作對比來判斷用戶是否合法。因爲密鑰只有服務端有,所以這種方法是安全的。
這種方案只在cookie中存儲當前登入用戶的惟一session,這種方案是安全的,所以想要作非法操做的用戶只拿到sessionID是沒有任何意義的。
點擊劫持的特色
總結來講,點擊劫持就是在用戶點擊網站時,使得劫持者在用戶在不知情的狀況下引導用戶作一些操做。其技術原理是在正常的網站上內嵌iframe框架,而且iframe框架的透明度爲0,這樣用戶在點擊頁面的時候,由於是在點擊看的見內容,實際上在點擊看不見的iframe框架的內容,從而使掉進劫持者的trap。
點擊劫持的防護
其原理在於當頁面中有iframe框架時,top對象和window對象是不同的,從而top.location對象 window.location對象也是不同的,所以能夠用下面代碼來進行禁用。
if(top.location != window.location){ top.location = window.location; }
能夠經過設置http response頭的方式進行禁用,
X-FRAME-OPTIONS:DENY
。PS:這個頭的其餘選項參考官方文檔。
好比加上驗證碼之類的防護措施。
傳輸鏈路竊聽篡改 以下圖
在上圖瀏覽器和服務器之間全部的節點都有能力竊聽篡改要轉發的信息。
PS:在mac和Linux上能夠經過命令traceroute
來追蹤請求從發起到目標服務器通過了哪些中間服務器,好比DNS服務器,路由轉發服務器等。
http竊聽
http篡改
https進行加密傳輸。 PS:https使用的是TLS(SSL)加密。TSL是SSL的改進算法。
可是雖然是加密傳輸,中間服務器無法竊聽數據,可是存在中間人卻能夠進行數據盜取,以下圖:
這樣,中間人能夠僞造服務器,在用戶和服務器之間進行信息交互,從而盜取用戶信息。所以引入證書機制,證書必須由受信任的的機構(CA)簽發。以下入過程:
本身往系統中添加證書是很危險的,由於簽發此證書的CA並無被瀏覽器及其其餘機構信任,也就是說此CA不受信任,若是你信任/本身添加了此證書到系統中後,若是此CA又給一個有問題的服務器簽發證書後,這樣信任這個機構簽發證書的機器就有了能面臨風險。
SUMMARY:https沒有證書也能夠正常使用,只是顯示不安全。
如何啓動https服務器: 申請證書 --> 配置https服務器
證實你是你!
指紋解鎖,虹膜識別,人臉識別等
密碼 - 泄漏渠道
若是一個網站的用戶數據泄露,不少用戶可能用同一個帳號密碼去註冊不一樣的網站,這就叫撞庫。
密碼 - 存儲
在存儲密碼的時候,只能由明文向密文變換,反之不能夠。
這是防止用戶密碼設置的過於簡單,在密碼進行加密的時候在密碼上再增長一串數字,使得加密後的密碼更加安全。
哈希算法
當明文有一點變換的時候,密文不是改變一點,而是全盤變化。
hash算法是一種信息摘要算法,咱們無法經過一段信息摘要計算出原始明文。
通常hash算法的結果都是32位字符串
彩虹表破解哈希算法
因爲哈希算法是不可逆的,所以網絡上能夠創建窮舉數據庫來破解哈希算法,而這種數據庫叫作彩虹表。
因爲單層哈希加密容易破解(容易被彩虹表窮舉),所以能夠採用多重哈希增大破解難度。
md5(明文)=密文 md5(md5(明文))=密文 md5(sh1(明文))=密文 md5(sh1(sh256(明文)))=密文
密碼 - 變化次數越多越安全
增大密碼傳輸的安全性
驗證碼策略限制用戶每分鐘只能登錄幾回,防止窮舉破解。
首先前端加密並不能保證傳輸的安全性,竊聽者拿到傳輸的密文後也能夠模擬用戶請求,從而進行進一步信息盜取,可是前端加密能夠保證竊聽者不能拿到明文,對撞庫效應有必定安全保證,覺得每一個網站的加密算法是不同的。
生物特徵密碼
生物特徵密碼的安全性
指紋,人臉容易在照片中出現,容易泄露。
生物特徵密碼都是經過類似度匹配,並不能徹底保證兩個很類似的人臉或其餘生物特徵不會出現碰撞。
因爲咱們的生物特徵通常都是惟一的,好比指紋,若是被泄漏,就沒法更改。
值得一提的是,sql注入遠遠比看到的簡單實例複雜的多,幾乎均可以做爲一門學科學習,而且其衍生分支不少。因此其危害是很大的。
一些神奇的 SQL 語法
檢測服務器環境信息,從而根據環境信息來進行一些非法操做。
檢查一個表有多少列。
用於猜解用戶名密碼,咱們知道,若是用戶名密碼特別複雜的狀況下,進行窮舉破解的成本會很是高,可是若是一位一位的破解的話,則會簡單不少,上面的sql則提供了這種功能。
SQL 注入危害
SQL 注入防護
這個方法相似於XSS的黑名單和白名單過濾功能,可是基於sql注入的變種等因素,這種方法並不能很好的防治sql注入。因策功能有限。
這是sql注入最主要的防護手段,基於數據庫提供的參數化查詢的功能,其主要原理爲:對於一條查詢,先將預查詢語句給到數據庫,好比
select * from table where id=?
,以後再把所缺的參數給到數據庫,這樣全部注入內容都是簡單的參數,也就沒有注入執行的危害了。
通常ORM框架都會解決注入問題,不管用上面哪一種方法。
上傳問題
上傳問題防護
以上三種防護功能比較有限,而程序輸出是指,當用戶再次讀取上傳的文件的時候,服務器已二進制碼的方式給用戶,這樣就算是可執行文件也無法執行了。
這種相似Linux下的目錄下文件權限,只有讀寫權限,沒有執行權限。
特徵
信息泄露的途徑
當系統報錯的時候,因爲沒有控制好錯誤堆棧的打印控制,使得一些敏感信息在錯誤堆棧中暴露,如連接字符串等。
注意和垂直權限控制作區分,垂直權限指的是咱們熟悉的管理員/普通用戶的區別。而水平權限控制則指的是同一權限的人在進行操做的時候可能出現的信息泄露問題。
社會工程學
其實對於互聯網上「誰是我」這個話題,當愈來愈多的咱們方方面面的資料被別人掌握時,攻擊者就約可能模擬「真我」去實施一些噁心行爲或是盜取「真我」的一些有價值的東西。
利用oAuth思想防止資料泄露
當用戶未受權的狀況下誰也不容許讀取資料,這樣能更好的方式業務開發人員不當的操做也不軌的行爲。由於業務開發人員大大高於用戶資料服務的開發人員。
不容許批量獲取資料能更有效的控制大量用戶資料被盜的狀況。
當若是真的有用戶資料出現丟失的狀況下,能夠有效的進行過後追蹤,肯定問題出現的緣由。
攻擊者經過模擬用戶的請求並大量去請求目標服務器使得服務器的負載很是大或者大量佔用服務器的帶寬,使得正經常使用戶無法進行正常訪問。而且若是當大量帶寬被佔用的時候,寬帶提供商爲了保證網絡信道的通暢,只能將受攻擊的服務器下線,所以受攻擊的服務器無法爲用戶提供正常服務。 其攻擊形式主要有:
- TCP半鏈接:就是在三次握手的時候,只是作一次請求連接操做,不作後續的對服務器的響應,致使服務器覺得有請求要真的連接它,形成服務器沒必要要的等待從而進行的攻擊。
- HTTP連接:這種就是模擬正常的請求鏈接進行大連服務請求的形式。
- DNS攻擊,DNS服務器的負載能力每每比正常大型服務器低,當大量攻擊請求致使DNS服務器無法爲正經常使用戶服務的時候,致使無法進行域名解析服務,也就形成DOS的真正攻擊出現。
大規模分佈式拒絕服務攻擊DDOS
這種攻擊是攻擊者可能經過病毒的方式控制了別人的機器,所以攻擊發起地點多是從不一樣的地方進行攻擊,每一個地點的攻擊流量可能不大,可是總和卻很巨大。這些被控制的機器就叫作「肉雞」,還有可能經過代理服務器的方式進行攻擊。
DOS攻擊防護
購買雲計算廠商的服務,讓其做爲代理,這樣在遇到這種狀況的時候,高防IP服務器會預先對請求進行流量清晰等防護操做,以後再將正常的請求分發給本身的服務器。
儘可能避免失敗重試,形成惡性滾雪球事件的發生
這種就是在收到攻擊的時候能及時的停掉有問題的服務,保證核心服務能正常運行。
經過CDN來減輕服務器的負載,將一部分負載轉移到CDN上來完成
這種攻擊就是當有有問題的請求被攻擊者拿取到以後,從而進行重複這種請求的一種攻擊。還有就是在消費、抽獎等活動中用戶重複這種過程致使異常訂單的出現等惡性結果。
重放攻擊防護
一個請求只能發送一次,當第二次發送token尚未變化,則標記這次請求無效