<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 跨站請求偽造 [跨站請求偽造(Cross-site request forgery)](http://en.wikipedia.org/wiki/Cross-site_request_forgery), 簡稱為 XSRF,是 Web 應用中常見的一個安全問題。前面的鏈接也詳細講述了 XSRF 攻擊的實現方式。 當前防范 XSRF 的一種通用的方法,是對每一個用戶都記錄一個無法預知的 cookie 數據,然后要求所有提交的請求(POST/PUT/DELETE)中都必須帶有這個 cookie 數據。如果此數據不匹配 ,那么這個請求就可能是被偽造的。 beego 有內建的 XSRF 的防范機制,要使用此機制,你需要在應用配置文件中加上 `enablexsrf` 設定: enablexsrf = true xsrfkey = 61oETzKXQAGaYdkL5gEmGeJJFuYh7EQnp2XdTP1o xsrfexpire = 3600 或者直接在 main 入口處這樣設置: beego.EnableXSRF = true beego.XSRFKEY = "61oETzKXQAGaYdkL5gEmGeJJFuYh7EQnp2XdTP1o" beego.XSRFExpire = 3600 //過期時間,默認1小時 如果開啟了 XSRF,那么 beego 的 Web 應用將對所有用戶設置一個 `_xsrf` 的 cookie 值(默認過期 1 小時),如果 `POST PUT DELET` 請求中沒有這個 cookie 值,那么這個請求會被直接拒絕。如果你開啟了這個機制,那么在所有被提交的表單中,你都需要加上一個域來提供這個值。你可以通過在模板中使用 專門的函數 `XSRFFormHTML()` 來做到這一點: 過期時間上面我們設置了全局的過期時間 `beego.XSRFExpire`,但是有些時候我們也可以在控制器中修改這個過期時間,專門針對某一類處理邏輯: ```go func (this *HomeController) Get(){ this.XSRFExpire = 7200 this.Data["xsrfdata"]=template.HTML(this.XSRFFormHTML()) } ``` ### 在表單中使用 在 Controller 中這樣設置數據: ```go func (this *HomeController) Get(){ this.Data["xsrfdata"]=template.HTML(this.XSRFFormHTML()) } ``` 然后在模板中這樣設置: <form action="/new_message" method="post"> {{ .xsrfdata }} <input type="text" name="message"/> <input type="submit" value="Post"/> </form> ### 在 JavaScript 中使用 如果你提交的是 AJAX 的 POST 請求,你還是需要在每一個請求中通過腳本添加上 _xsrf 這個值。下面是在 AJAX 的 POST 請求,使用了 jQuery 函數來為所有請求都添加 _xsrf 值: jQuery cookie插件:https://github.com/carhartl/jquery-cookie base64 插件:http://phpjs.org/functions/base64_decode/ ```js jQuery.postJSON = function(url, args, callback) { var xsrf, xsrflist; xsrf = $.cookie("_xsrf"); xsrflist = xsrf.split("|"); args._xsrf = base64_decode(xsrflist[0]); $.ajax({url: url, data: $.param(args), dataType: "text", type: "POST", success: function(response) { callback(eval("(" + response + ")")); }}); }; ``` #### 擴展 jQuery 通過擴展 ajax 給每個請求加入 xsrf 的 header 需要你在 html 里保存一個 `_xsrf` 值 ```go func (this *HomeController) Get(){ this.Data["xsrf_token"] = this.XSRFToken() } ``` 放在你的 head 中 ```html <head> <meta name="_xsrf" content="{{.xsrf_token}}" /> </head> ``` 擴展 ajax 方法,將 `_xsrf` 值加入 header,擴展后支持 jquery post/get 等內部使用了 ajax 的方法 ```js var ajax = $.ajax; $.extend({ ajax: function(url, options) { if (typeof url === 'object') { options = url; url = undefined; } options = options || {}; url = options.url; var xsrftoken = $('meta[name=_xsrf]').attr('content'); var headers = options.headers || {}; var domain = document.domain.replace(/\./ig, '\\.'); if (!/^(http:|https:).*/.test(url) || eval('/^(http:|https:)\\/\\/(.+\\.)*' + domain + '.*/').test(url)) { headers = $.extend(headers, {'X-Xsrftoken':xsrftoken}); } options.headers = headers; return ajax(url, options); } }); ``` 對于 PUT 和 DELETE 請求(以及不使用將 form 內容作為參數的 POST 請求)來說,你也可以在 HTTP 頭中以 X-XSRFToken 這個參數傳遞 XSRF token。 如果你需要針對每一個請求處理器定制 XSRF 行為,你可以重寫 Controller 的 CheckXSRFCookie 方法。例如你需要使用一個不支持 cookie 的 API, 你可以通過將 `CheckXSRFCookie()` 函數設空來禁用 XSRF 保護機制。然而如果 你需要同時支持 cookie 和非 cookie 認證方式,那么只要當前請求是通過 cookie 進行認證的,你就應該對其使用 XSRF 保護機制,這一點至關重要。 ## 支持controller 級別的屏蔽 XSRF 之前是全局設置的一個參數,如果設置了那么所有的 API 請求都會進行驗證,但是有些時候API 邏輯是不需要進行驗證的,因此現在支持在controller 級別設置屏蔽: ``` type AdminController struct{ beego.Controller } func (a *AdminController) Prepare() { a.EnableXSRF = false } ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看