在應用層,最普遍的通訊協議就是HTTP,這個HTTP可以經過TLS/SSL的加密,形成HTTPS。
TLS/SSL在應用層和傳輸層之間,自己形成一層,並在這一層將HTTP訊息加密,
TLS/SSL具體使用的加密演算法,是DES、AES、RSA等著名的演算法,
其中DES、AES是對稱加解密演算法、RSA是非對稱加解密演算法。
到了網路層,VPN跟網際網路都是著名的通訊方式,可使用IP作為通訊協議,或是使用
IPsec做為加密版IP的加密通訊方式,具體的加密方式也是用了DES、AES、RSA等演算法。
Spring Security提供對HTTPS的支援;但HTTPS本身只能做到對訊息加解密,
不能防止XSS、CSRF攻擊。
什麼是XSS攻擊?就是跨網站腳本(Script)攻擊。意指某駭客於像是留言板之類可以動態
添加訊息之程式內,添加了某段惡意script(程式碼例如JavaScript),
這段惡意script就存在於這個留言板網站內,等到有不知情的受害者,
透過瀏覽器去開啟執行留言板,這段留言版內的惡意script即會於受害者電腦的
瀏覽器執行,進而攻擊受害者電腦。由於駭客是透過跨越像是留言板這樣的網站來攻擊
受害者,所以這種攻擊又稱作是跨網站攻擊,又因為是利用惡意script來攻擊,
所以又稱作是跨網站腳本攻擊,就是XSS攻擊。
那什麼是CSRF攻擊?就是跨網站偽造請求攻擊。
就是駭客先在某網站注入惡意script,然後利用某個受害者於某網站是受到信任的特點,
等待該受害者進入網頁。
當受害者使用瀏覽器進入該網頁時,駭客利用之前注入的惡意script,
於該網站內誘騙受害者,在不知情的情況下,執行駭客想要他執行的另一段惡意script。
由於受害者在該網站是受信任(比方說有相關憑證),因此即使受害者做的是惡意script,
網站也不會有所懷疑,進而使受害者在不知情的狀況下執行駭客要做的事。
受害者是在網頁內部,所以是於自身電腦的瀏覽器執行這惡意script,
受害者電腦因此被攻擊。
駭客就這樣透過跨越網站、且網站信任受害者的方式,攻擊遠端某個受害者的電腦。
所以這也是跨網站攻擊;又因為網站以為這是受害者自己的請求而非駭客讓受害者做的,
所以也可以說是駭客偽造了受害者的請求,因此這種攻擊又稱做跨網站請求偽造攻擊。
Spring Security提供防止XSS、CSRF攻擊、session hijacking的設定。
什麼是session hijacking?就是我們知道在瀏覽器端跟伺服器端,使用者的資訊是透過
包裝在http請求與回應的cookie來傳遞的。
cookie內含一個叫sessionid的值,
透過這個值,可以讓瀏覽器跟伺服器去辨認同一個使用者;然後伺服器會利用這個
sessionid去包裝出http session。
所以如果駭客要去影響某個使用者的資訊,可以於http請求和回應在網路傳遞時,
去竊取http請求和回應,內含的cookie與sessionid,竊取出sessionid後即可去
影響伺服器端的http session。這就是session hijacking。
通常在JAVA Web專案,要做到以HTTPS來取代HTTP,除了針對伺服器做設定,
也必須在專案內,添加Spring Security的dependency即可。
不一定非得要實作Spring Security的code。