原文請看個人GitHub博客>>html
跨站請求僞造(英語:Cross-site request forgery),也被稱爲 one-click attack 或者 session riding,一般縮寫爲 CSRF 或者 XSRF, 是一種挾制用戶在當前已登陸的Web應用程序上執行非本意的操做的攻擊方法。laravel
簡單的說,就是利用遊覽器對用戶的信任,好比,用戶已經登陸了ww.aaa.com,天然aaa這個網站就會將用戶的登陸狀態session存在cookie中;
而後,aaa.com這個網頁有一個對做品點讚的功能,點贊提交地址爲aaa.com/api.like?id=777
;
這時,另一個叫www.bbb.com的網站,放了這樣一個元素<img src="aaa.com/api.like?id=888">
,這樣的話,一旦用戶進入這個bbb.com頁面,就會請求aaa.com這個網站的點贊接口,並且點讚的用戶對象是888;
最後由於用戶的登陸信息還沒有過時,那就等於給id爲888這個做品點讚了,然而,用戶並不知情。git
有兩種方法:github
使用iframe會引出一些不安全的問題,好比繞過referer驗證,好比資源盜用等,因此,不少網站會設置X-Frame-Options
爲 DENY
,這也是一個安全的補充點。web
問:既然請求靜態資源都是get請求,那麼要是後端把點贊接口改成post的方式也能夠吧?後端
答:不能夠。由於,bbb.com網站徹底能夠設置一個form表單,action爲bbb.com,method爲post,接着input的name爲id,value爲888,而後,script代碼直接submit表單。爲了頁面不重定向,還能夠在form外層加一個iframe。因爲form表單實際上是直接跳轉,因此不存在跨域的問題。api
防止CSRF的最好方法仍是帶token吧~跨域