八戒一区二区三区-午夜A级伦理电影-91好吊色国产欧美日韩在线-欧美国产精品二区三区13p-国产操逼大毛片基地-亚洲第一性爱免费视频网

站長資訊網
最全最豐富的資訊網站

yii csrf是什么

跨站請求偽造(英語:Cross-site request forgery),也被稱為 one-click attack 或者 session riding,通常縮寫為 CSRF 或者 XSRF, 是一種挾制用戶在當前已登錄的Web應用程序上執(zhí)行非本意的操作的攻擊方法。

yii csrf是什么

跨站請求攻擊,簡單地說,是攻擊者通過一些技術手段欺騙用戶的瀏覽器去訪問一個自己曾經認證過的網站并運行一些操作(如發(fā)郵件,發(fā)消息,甚至財產操作如轉賬和購買商品)。 (推薦學習:yii框架)

由于瀏覽器曾經認證過,所以被訪問的網站會認為是真正的用戶操作而去運行。

這利用了web中用戶身份驗證的一個漏洞:簡單的身份驗證只能保證請求發(fā)自某個用戶的瀏覽器,卻不能保證請求本身是用戶自愿發(fā)出的。

yii2的csrf,這里簡單介紹一下它的驗證機制。

取用于csrf驗證的token值;判斷用于csrf的token是否存在,如果不存在則使用generateCsrfToken()生成。

驗證webController中的beforeAction()方法中有Yii::$app->getRequest()->validateCsrfToken()判斷,用于驗證csrf。

一般我的認識yii2的csrf都是從Yii::$app->request->getCsrfToken()開始;好的,我們就從getCsrfToken()說起。 此方法在yiiwebRequest.php中:

/**  * Returns the token used to perform CSRF validation.  * 返回用于執(zhí)行CSRF驗證的token  * This token is a masked version of [[rawCsrfToken]] to prevent [BREACH attacks](http://breachattack.com/).  * This token may be passed along via a hidden field of an HTML form or an HTTP header value  * to support CSRF validation.  * @param boolean $regenerate whether to regenerate CSRF token. When this parameter is true, each time  * this method is called, a new CSRF token will be generated and persisted (in session or cookie).  * @return string the token used to perform CSRF validation.  */ public function getCsrfToken($regenerate = false) {     if ($this->_csrfToken === null || $regenerate) {         if ($regenerate || ($token = $this->loadCsrfToken()) === null) {    //loadCsrfToken()就是在cookie或者session中獲取token值             $token = $this->generateCsrfToken();        //如果token為空則調用generateCsrfToken()去生成         }         // the mask doesn't need to be very random         $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-.';         $mask = substr(str_shuffle(str_repeat($chars, 5)), 0, static::CSRF_MASK_LENGTH);         // The + sign may be decoded as blank space later, which will fail the validation         $this->_csrfToken = str_replace('+', '.', base64_encode($mask . $this->xorTokens($token, $mask)));     }      return $this->_csrfToken; }  /**  * Loads the CSRF token from cookie or session.  * @return string the CSRF token loaded from cookie or session. Null is returned if the cookie or session  * does not have CSRF token.  */ protected function loadCsrfToken() {     if ($this->enableCsrfCookie) {         return $this->getCookies()->getValue($this->csrfParam);         //cookie中獲取csrf的token      } else {         return Yii::$app->getSession()->get($this->csrfParam);          //session中獲取csrf的token     } }  /**  * Creates a cookie with a randomly generated CSRF token.  * Initial values specified in [[csrfCookie]] will be applied to the generated cookie.  * @param string $token the CSRF token  * @return Cookie the generated cookie  * @see enableCsrfValidation  */ protected function createCsrfCookie($token) {     $options = $this->csrfCookie;     $options['name'] = $this->csrfParam;     $options['value'] = $token;     return new Cookie($options); }  /**  * Generates  an unmasked random token used to perform CSRF validation.  * @return string the random token for CSRF validation.  */ protected function generateCsrfToken() {     $token = Yii::$app->getSecurity()->generateRandomString();      //生成隨機的安全字符串     if ($this->enableCsrfCookie) {         $cookie = $this->createCsrfCookie($token);                  //createCsrfCookie()用于生成csrf的key=>value形式的token         Yii::$app->getResponse()->getCookies()->add($cookie);       //將生成key=>value保存到cookies      } else {         Yii::$app->getSession()->set($this->csrfParam, $token);     //將csrf的token存在session中     }     return $token; }  /**  * 每次調用控制器中的方法的時候都會調用下面的Yii::$app->getRequest()->validateCsrfToken()驗證  * @inheritdoc  */ public function beforeAction($action) {     if (parent::beforeAction($action)) {         if ($this->enableCsrfValidation && Yii::$app->getErrorHandler()->exception === null && !Yii::$app->getRequest()->validateCsrfToken()) {                      throw new BadRequestHttpException(Yii::t('yii', 'Unable to verify your data submission.'));         }         return true;     } else {         return false;     } }   /**  * 校驗方法  * Performs the CSRF validation.  *  * This method will validate the user-provided CSRF token by comparing it with the one stored in cookie or session.  * This method is mainly called in [[Controller::beforeAction()]].  *  * Note that the method will NOT perform CSRF validation if [[enableCsrfValidation]] is false or the HTTP method  * is among GET, HEAD or OPTIONS.  *  * @param string $token the user-provided CSRF token to be validated. If null, the token will be retrieved from  * the [[csrfParam]] POST field or HTTP header.  * This parameter is available since version 2.0.4.  * @return boolean whether CSRF token is valid. If [[enableCsrfValidation]] is false, this method will return true.  */ public function validateCsrfToken($token = null) {     $method = $this->getMethod();     // only validate CSRF token on non-"safe" methods http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.1.1     if (!$this->enableCsrfValidation || in_array($method, ['GET', 'HEAD', 'OPTIONS'], true)) {         return true;     }      $trueToken = $this->loadCsrfToken();      if ($token !== null) {         return $this->validateCsrfTokenInternal($token, $trueToken);     } else {         return $this->validateCsrfTokenInternal($this->getBodyParam($this->csrfParam), $trueToken)             || $this->validateCsrfTokenInternal($this->getCsrfTokenFromHeader(), $trueToken);              //getCsrfTokenFromHeader()這個我也不太理解,還請指點一下     } }  /**  * @return string the CSRF token sent via [[CSRF_HEADER]] by browser. Null is returned if no such header is sent.  */ public function getCsrfTokenFromHeader() {     $key = 'HTTP_' . str_replace('-', '_', strtoupper(static::CSRF_HEADER));     return isset($_SERVER[$key]) ? $_SERVER[$key] : null; }  /**  * Validates CSRF token  *  * @param string $token  * @param string $trueToken  * @return boolean  */ private function validateCsrfTokenInternal($token, $trueToken) {     $token = base64_decode(str_replace('.', '+', $token));      //解碼從客戶端獲取的csrf的token     $n = StringHelper::byteLength($token);     if ($n <= static::CSRF_MASK_LENGTH) {         return false;     }     $mask = StringHelper::byteSubstr($token, 0, static::CSRF_MASK_LENGTH);     $token = StringHelper::byteSubstr($token, static::CSRF_MASK_LENGTH, $n - static::CSRF_MASK_LENGTH);     $token = $this->xorTokens($mask, $token);      return $token === $trueToken;       //驗證從客戶端獲取的csrf的token和真實的token是否相等 }

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
人人妻人人澡人人爽人人精品电影| 一面膜上边一面膜下边视频| 亚洲AV无码久久久久久精品| 亚洲精品永久在线观看| 诱人的老师HD中字| 性色av蜜臀av色欲av免费| 亚洲AV无码不卡| 调教小SAO货撅起打屁股作文| 无码人妻一区二区三区在线视频| 色哟哟最新在线观看入口| 无码一区二区三区AV免费| 亚洲精品自偷自拍无码| 0D0D肥胖老太婆| CSGO高清大片视频| 国产成人AV综合久久| 极品少妇高潮到爽| 女儿国免费观看完整版在线| 看成年女人午夜毛片免费| 欧美视频一区二区图文| 推拿完整版中文字幕| 亚洲人成无码WWW久久久| 99RE8这里有精品热视频| 国产99久久亚洲综合精品| 饥渴少妇AV无码影片| 男女高潮免费观看无遮挡| 色噜噜狠狠色综合日日| 亚洲国产精品热久久| 亚洲国产成人无码AV在线播放| 又爽又高潮的BB视频免费看| 成人免费看WWW网址入口| 被老汉耸动呻吟双性美人| 国产麻豆成人传媒免费观看| 久久婷婷六月综合色液啪| 日本VPSWINDOWS怀孕| 亚洲AV无码一区二区密桃精品| 中文字幕久久精品一区二区三区| 丁香花在线电影小说观看| 精品久久久久久国产| 强行入侵粗暴完整版| 亚洲AV旡码高清在线观看| 77777亚洲午夜久久多人| 国产精品久久久久久免费软件 | 教官在我腿间疯狂驰聘视频| 欧美人与性动交XXⅩXX| 亚洲AV第一成肉网肉片AV| 97精品国产手机| 国产日韩精品中文字无码| 嫩模超大胆大尺度人体写真| 西瓜影院免费观看完整版电影| 征服好友的保守人妻| 国产精品18久久久久久麻辣| 美国ZOOM人与ZOOM| 小13箩利洗澡无码免费视频| 99久久国产福利自产拍| 黑森林精选AV导航| 日韩精品无码免费专区网站| 野花免费观看日本电影哔哩哔哩| 国产★蜜臀AV无码8MAV| 免费黄色网站久久精品| 亚洲AⅤ永久无码一区二区三区| BBOX撕裂BASS俄罗斯| 极品少妇的粉嫩小泬看片| 日韩欧美亚洲国产精品字幕久久久 | 99久久无码一区人妻A黑| 国产在线精品一区二区三区直播| 欧美一级草B内射| 肉感妇BBWBBWBBWBBW| 伊人丁香狠狠色综合久久| 国产精品综合一区二区三区| 欧美视频一区二区三区| 亚洲婷婷月色婷婷五月| 99久久免费国产精品四虎| 国产香蕉国产精品偷在线| 久久久久久精品久久久| 无码精品A∨在线观看无广告| 99久久婷婷国产一区二区| 久久国产乱子精品免费女| 乌克兰ZOOMKOOL| XXXXFREE少妇过瘾| 老男人吃奶疯狂啃肿奶头| 性生生活色欲片性按摩| 成人国内精品久久久久影院| 蜜臀AV性久久久久蜜臀AⅤ| 亚洲成A人片在线观看无码专区| 东京热无码一区二区三区AV | 黑人玩弄人妻1区二区| 少妇激情A∨一区二区三区| A三级三级成人网站在线视频| 久久久中文久久久无码| 亚洲AV中文AⅤ无码AV接吻| 国产成人久久精品二区三区| 人人妻人人爽人人澡欧美二区| 真人视频直播APP免费观看| 精品 亚洲 无码 自拍 另类| 无码人妻一区二区三区免水牛视频 | 精品人妻视频一区二区三区 | 无码中文字幕日韩专区| 成.人.大.片在线观看| 欧美激情国产精品视频一区二区| 艳妇乳肉豪妇荡乳AV| 精品BBBBB性ⅩXXXX少妇| 性一交一乱一伦一色一情孩交| 国产99视频精品免视看9| 日本三级强乳伦姧| YSL千人千色AE86V10| 免费无码成人AV在线播 | 亚洲爆乳WWW无码专区| 国产免费观看久久黄AV片| 少妇性饥渴VIDEOS| 亚洲资源AV无码日韩AV无码 | 丰满熟妇人妻风流农村视频| 人妻精品久久无码区| ATLANTICOCEAN巨大| 国产无遮挡又黄又爽又色| 婷婷五月18永久免费网站| 粉嫩一区二区三区性色AV| 日本人妻人人人澡人人爽| 亚洲免费福利视频| 狠狠色综合TV久久久久久| 亚洲AV色香蕉一区二区三区| 国产乱人伦AV在线麻豆A| 五月丁香合缴情在线看| YY8090理论三级在线观看| 欧洲码和亚洲码的尺码区别| FREE性中国熟女HD| 强开小娟嫩苞又嫩又紧| Y11111少妇无码电影| 日本JAPANESE护士人妻| 成人免费无码大片A毛片| 日韩国产成人精品视频| 德国FREE性VIDEO极品| 视频在线一区二区| 国产精品99久久免费观看| 无遮挡啪啪摇乳动态图GIF| 国产真实老熟女无套内射| 亚洲高清国产拍精品26U | 亚洲国产精品成人AV在线| 精品人妻中文AV一区二区三区| 亚洲狠狠色丁香婷婷综合| 国产AV无码专区亚洲AV软件| 少妇大叫太大太爽受不了| 国产精品久久久久乳精品爆| 性VODAFONEWIFI另类| 幻女BBWXXXX非洲黑人| 亚洲无人区码二码三码区别| 麻豆国产成人AV在线播放欲色| 999ZYZ玖玖资源站在线观看| 人妻无码人妻有码中文字幕在线 | 三个男人躁我一个爽| 国产激情无码一区二区三区| 亚洲AV第一成肉网肉片AV| 久久久久AV无码免费网| 1—36集电视剧免费观看36集| 欧美亚洲色综久久精品国产| 妇女性内射冈站HDWWWOOO| 午夜香吻电视剧免费观看| 精品一线二线三线区别大吗| 中国娇小与黑人巨大交| 人人妻人人爽人人人少妇| 国产精品女人呻吟在线观看| 亚洲精品国偷自产在线| 美女浴室洗澡裸体爆乳无遮挡| 薄先生突然黏她上瘾TXT下载| 天堂AV无码一区二区三区 | 亚洲欧美乱综合图片区小说区| 国产乱人伦偷精品视频AAA| 亚洲精品无码久久毛片波多野吉衣| 旧里番肉欲に堕ちた牝たち| JEAⅠOUSVUE成熟HD| 天天躁夜夜踩很很踩2022| 激情综合婷婷丁香五月情| 欲しがる人妻 波多野结衣| 日本WWW一道久久久免费榴莲| 国产精品无码电影在线观看| 亚洲中文字幕在线无码一区二区| 啪啪叉叉xx高清无码| 国产精品自在欧美一区| 亚洲综合色丁香婷婷六月图片| 秋霞A级毛片在线看| 啊灬啊灬快灬高潮了视频| 无码人妻品一区二区三区精99| 久久WWW成人看片免费不卡| CEK俄罗斯BNAE0| 午夜人妻久久久久久久久| 麻豆亚洲AV熟女国产一区二| 东京热一区二区三区| 亚洲乱码日产一区三区| 人妻人人爽人人澡人人喊| 国模GOGO大尺度尿喷人体| 337P日本欧洲亚洲大胆裸体艺| 天天躁夜夜躁狠狠躁2021A2| 久久亚洲私人国产精品VA| 大战丰满人妻性色AV偷偷| 亚洲日韩在线中文字幕综合 | 欧美日韩一区二区综合 | 亚洲S色大片在线观看| 欧美A片XⅩX黑人性受| 国产亚洲精品精品精品| AV 日韩 人妻 黑人 综合| 亚洲AV无码成人精品区伊人小说|