標籤:csrf 安全
一、CSRF簡介
CSRF(Cross-site request forgery跨站請求偽造),也被稱為“one click attack”或者session riding,通常縮寫為CSRF或者XSRF,是一種對網站的惡意利用。
CSRF是一種依賴web瀏覽器的、被混淆過的代理人攻擊(deputy attack)。
CSRF與之前說道XSS相比,出現比較少,流行度也不高,但是一旦出現,就是危害巨大的,難於防禦(因為影響業務和使用者體驗)。CSRF攻擊的本質是攻擊者盜用合法使用者的身份性,以使用者的名義進行非法操作。
二、CSRF進階
瀏覽器所持有的Cookie分為兩種:一種是“Sesion Cookie”,又稱“臨時Cookie”;另一種是“Third-party Cookie”,也稱為“本地cookie”。兩者的區別在於,Third-party Cookie是伺服器在Set-Cookie時指定Expire時間,只是到了Expire時間後Cookie才會失效,所以這種Cookie才會儲存在本地;Session Cookie則沒有指定Expire時間,所以關閉瀏覽器,Session Cookie就會失效。
在瀏覽網站的過程中,若是一個網站設定了Session Cookie,那麼在瀏覽器的進程的生命週期內,及時瀏覽器心開啟一個Tab頁面,Session Cookie也是有效,Session Cookie儲存在瀏覽器進程的記憶體空間中。CSRF攻擊就是建立在會話之上的。
總結一下,CSRF攻擊需要兩個條件:
1、CSRF攻擊建立在瀏覽器與伺服器的會話中;
2、欺騙使用者訪問攻擊URL;
瀏覽器也會有一些安全性原則防禦,IE處於安全的考慮,預設禁止了瀏覽器在<img>,<iframe>,<scrtpt>,<link>等標籤中發送第三方Cookie。而Firefox中,預設策略是允許發送第三方Cookie的。
P3P
P3P是一種被稱為個人隱私安全平台項目(the Platform for Privacy Preferences)的標準,能夠保護線上隱私權,使Internet衝浪者可以選擇在瀏覽網頁時,是否被第三方收集並利用自己的個人資訊。如果一個網站不遵守P3P標準的話,那麼有關它的Cookies將被自動拒絕,並且P3P還能夠自動識破多種Cookies的嵌入方式。p3p是由全球資訊聯盟網所開發的。
隨著Internet的發展,電子商務發展勢頭也異常迅猛。這種新的貿易方式在帶給人們難以想象的便利前提下,也給人們帶來了以往現金交易模式下所沒有的麻煩——通過網路泄露個人隱私資料。(Platform for Privacy Preferences)正是一種可以提供這種個人隱私保護原則,並且正在被越來越多的技術人員接受的新技術。
Java實現:在Response的回應標頭中加入
response.setHeader("P3P","CP=/"CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR/"");
請注意不要濫用該P3P屬性,以免帶來安全隱患。
CSRF攻擊成功的本質原因是重要操作的所有參數都是可以被攻擊者猜測到了。
三、CSRF的防禦
3.1 驗證碼
驗證碼是認為對抗CSRF攻擊最簡潔而有效防禦方法。但是考慮到使用者的體驗效果,最好是在重要的操作再使用驗證碼。所以在支付的時候都可以看到再一次輸入密碼或者驗證碼的要求。
3.2 混淆參數
CSRF攻擊多是通過構造URL進行攻擊的,所以可以在URL請求中加入一些隨機數或者混淆。
http://www.XXXXXX.com/XXXXX.php?url=rHfK000YH1eRCqsWBVUDjjv3ru5QictGyTrai04fZHnNCmGNz8Oyoc3XLJslxxiLK4Uhf91JVGzeFUXujPJ4iZlOFZKFZGlb7bU_TZMwAiSlA9D2-f4NdEuyQYp8UVXHBw1W0WY.7Y_ifkR5QZWY8BHCwKZWHaqhWKY5BWJI64qt7jHzk8sHfGmqx-OcO3ZgKfYt8-P1tA-BZZjdsRP5QfHPGmsSxH9LqrZd_sSxH9vUtr1dsSXej_SyZx8sSXej_LmIMAz1c_HZ4xl54xPmuCyr1Wgvy0.THdxnHf1PW6vnHD1PfKYTh7buy-b5Hm4njD0mvq1I7qzmy4o5H00TLNBTy-b5HDYn1m3PWDkn1RLnWnLP10zPWb0ugw4TARqnHD0uy-b5H00uyw-TvPGujYs0AP_pyPogLw4TARqn6KsUWYk0Zw-ThdGUh7_5H00XMfqTvN_u6KsTjYkP101rHnYP1c0mywGujYznH04n161P1DsPfKGTdqLpgF-UAN1T1Ys0AN3Ijd9mvP-TLPRXgK-rhdsr1VsIh-brWDYn1m3PWDkn1RLnWnLP10zPWberv-1N-PfrW0erLKzUvwdmLwRXgK-rWnknjcerLw1Tv-brMNGc10hmMPFUMPdTh78mvRWnBuBTY-8IhN1IankFhF1HAq9UBnz0APzm1YLPjRk&ck=2818.174.177.351.22.678.292.1631
3.3 Token
請求加入Token是目前防禦CSRF最好的方式,對應用的架構水平要求就高,使用者的會話有效期間也不宜過長。
Token防禦的重點在於Token的產生、儲存、校正、失效等方面。
1、Token產生:時間戳記+隨機數,長度16--20位即可,時間戳記就是為了判斷Token是否失效;
2、Token只能使用一次,而且只在重要的操作時候進行校正Token;
3、Token儲存:後台:分布式緩衝系統中;前端頁面的標籤:<meta name="CSRF_Token" content="14232454567687456486796" />;
4、通過Javascript構造安全連結URL,並帶上Token;
本文出自 “夢朝思夕” 部落格,請務必保留此出處http://qiangmzsx.blog.51cto.com/2052549/1674208
淺析CSRF攻擊