1、跨站點請求僞造(CSRF)javascript
什麼是csrf呢?php
藉助用戶的身份去作有損用戶利益(一些事情)的事情。java
怎麼實現跨站點請求僞造呢? node
一、僞造者經過創造一個帶有<a href="">或<img src="">標籤地址指向僞造者建立的url的網頁git
好比:github
<a href="http://bank.com/transfer.do?acct=MARIA&amount=100000">查看個人圖片!</a> <img src =「http://bank.com/transfer.do?acct=MARIA&amount=100000」width =「0」height =「0」border =「0」>
二、僞造者經過創造一個帶有form表單的網頁 安全
<form action =「<nowiki> http://bank.com/transfer.do </ nowiki>」method =「POST」> <input type =「hidden」name =「acct」value =「MARIA」/> <input type =「hidden」name =「amount」value =「100000」/> <input type =「submit」value =「查看個人圖片」/> </form>
若是某個網站有漏洞,僞造者就能夠編寫一個帶有直接跳轉這個網站的某個操做的連接的頁面,用戶點擊僞造者建立的這個頁面的url,就會執行僞造者想讓用戶執行的操做。假如這是一個有轉帳操做的網站,某個用戶有在這個網站登陸過,而且沒有註銷登陸狀態,用戶身份一直能夠被拿到,用戶點擊僞造者僞造的轉帳url,轉帳帳戶是僞造者的帳戶,用戶就會將錢轉給僞造者。服務器
網站如何防止csrf攻擊?session
一、網站添加用戶確認操做:app
好比請求以前添加用戶輸入驗證碼、或是第二次確認密碼、郵箱驗證等功能
二、服務端隨機產生token,驗證token
進入頁面,服務端隨機生成一個token,而後存在session中,請求的時候服務端驗證請求中的token是否與服務器存儲的一致。
三、驗證請求的來源,http referer字段
僞造者給的連接,這裏是個模擬轉帳的連接,已經作了referer判斷
總結:
因此咱們不要隨便去瀏覽一些不安全的網站,更不要在不安全的網站上去註冊/登陸本身的信息,謹慎在未知安全的網站去註冊本身的信息,特別是涉及
到轉帳支付的網站,若是登陸這樣的網站,且沒有主動去退出登陸,破壞者就有機會利用這些不安全的網站的漏洞,利用你的身份去作一些損害你的利益
的事情,好比誘導你點擊某個連接或按鈕而後就執行不安全網站上的某個轉帳操做 。
咱們常見的在網頁上執行某個操做以前,被要求輸入二維碼、二次確認密碼等都是爲了防止攻擊者藉着用戶的身份對網頁去直接進行某個操做,在某些具備
重要的操做的網頁,也能夠利用服務器隨機生成token的方式,去確認在執行重要操做時是可信任的用戶在真正作執行操做,或是服務器經過判斷請求的來源http中
的referer字段,確保執行操做的真實性。
參考資料:
學習node開發、部署服務:
https://github.com/nswbmw/N-blog/blob/master/book/4.15%20%E9%83%A8%E7%BD%B2.md#4151-%E7%94%B3%E8%AF%B7-mlab
跨站請求僞造crsf:
https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)
很容易懂的crsf講解:
https://cloud.tencent.com/developer/article/1004943