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

站長(zhǎng)資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

yii csrf是什么

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

yii csrf是什么

跨站請(qǐng)求攻擊,簡(jiǎn)單地說,是攻擊者通過一些技術(shù)手段欺騙用戶的瀏覽器去訪問一個(gè)自己曾經(jīng)認(rèn)證過的網(wǎng)站并運(yùn)行一些操作(如發(fā)郵件,發(fā)消息,甚至財(cái)產(chǎn)操作如轉(zhuǎn)賬和購(gòu)買商品)。 (推薦學(xué)習(xí):yii框架)

由于瀏覽器曾經(jīng)認(rèn)證過,所以被訪問的網(wǎng)站會(huì)認(rèn)為是真正的用戶操作而去運(yùn)行。

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

yii2的csrf,這里簡(jiǎn)單介紹一下它的驗(yàn)證機(jī)制。

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

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

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

/**  * Returns the token used to perform CSRF validation.  * 返回用于執(zhí)行CSRF驗(yàn)證的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為空則調(diào)用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();      //生成隨機(jī)的安全字符串     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; }  /**  * 每次調(diào)用控制器中的方法的時(shí)候都會(huì)調(diào)用下面的Yii::$app->getRequest()->validateCsrfToken()驗(yàn)證  * @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;     } }   /**  * 校驗(yàn)方法  * 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()這個(gè)我也不太理解,還請(qǐng)指點(diǎn)一下     } }  /**  * @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;       //驗(yàn)證從客戶端獲取的csrf的token和真實(shí)的token是否相等 }

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
波多野结衣的AV电影| 成熟女人牲交片免费观看视频| 无码欧美毛片一区二区三在线视频 | 美女大BXXXXN内射| 国产一区二区三区在线视頻| 成人A级毛片免费观看AV网站| 最新版天堂中文在线官网| 亚洲国产成人精品无码区在线网站 | 日韩精品无码免费专区午夜不卡| 麻豆影视视频在线观看完整版 | 精品亚洲自慰AV无码喷奶水| 国产精品久久久久9999无码 | 国色精品卡一卡2卡3卡4卡免费| 丰满少妇人妻无码| 宝贝把腿抬高点我让你更爽漫画| 97精品依人久久久大香线蕉97| 在公交车上弄到高C了公交车最后| 亚洲乱人伦中文字幕无码| 性生大片免费观看网站| 天天影视网色香欲综合网| 日韩无码视频专区| 日韩AV无码一区二区三区不卡毛 | 欧美人与牲禽动交精品| 女人收缩时男人舒服吗| 内射极品少妇一区二区AV| 蜜臀AⅤ永久无码精品| 麻豆我精产国品一二三产区区别| 热の无码热の有码热の综合| 人体欣赏SHOWYBEAUTY| 人妻少妇乱子伦无码专区| 人妻AV资源先锋影音AV资源 | 永久免费观看午夜成人网站 | 无码国产精品一区二区免费式影视| 少妇被又粗又硬猛烈进出小说| 日本熟妇WWW色视频在线播放| 日本少妇人妻XXXXⅩ18欧美| 亚洲AV无码成H人动漫网站| 亚洲AV无码一区二区三区在线播| 亚洲AV永久无码精品三区在线| 中国小帅男男GAYXNXX| 18禁裸乳无遮挡免费网站| 51CG9热心的朝阳群众| ASS年轻少妇浓毛PICS| MD豆传媒一二三区| 差差漫画页面免费漫画欢迎你| 粗壮挺进人妻水蜜桃成熟漫画| 黑人啊灬啊灬啊灬快灬深| 娇妻被黑人杂交下呻吟| 久久久久久精品免费免费WEⅠ| 麻花传媒剧国产MV在线观看| 少妇性活BBBBBBBBB四川| 小说蜜汁樱桃林妙妙的结局| 亚洲丰满性熟妇ⅩXXOOO| 一炕四女被窝交换啪啪| 1024久久亚洲精品无码| 国产精品久久久尹人香蕉| 免费的最近直播比较火的黄台 | 久别的草原在线影院观看中文| 日产精品卡2卡3卡4卡免费| 亚洲乱码一区AV春药高潮图片| 超碰97人人模人人爽人人喊| 久久精品人人槡人妻人人玩AV| 久久久久久久精品国产亚洲87| 色久综合网精品一区二区| 无码毛片AAA在线| 4HUWWW四虎永久免费| 国产真人无遮挡作爱免费视频| 秋霞免费理论片在线观看| 亚洲无人区一码二码三码区别 | 亚洲中文精品久久久久久不卡| 永久免费无码国产| 99RE6热视频这里只精品首页| 刺激的乱亲小说43部分阅读| 久久久久亚洲精品天堂| 人人妻人人狠人人爽天天综合网| 天天摸天天碰天天添| 99久热RE在线精品99 6热| 丰满少妇被猛烈进入无码| 免费看无码自慰一区二区| 亚洲国产AV一区二区三区四区| 大肉大捧一进一出好爽视频| 娇妻被领导抱进卧室| 十八禁无遮无拦视频免费| AV成人无码无在线观看| 久久国产劲爆∧V内射| 欧美人妖XXXX做受| 亚洲无线一二三四区手机| 国产精品白丝无码ThePorn| 久久精品无码专区免费| 无码国产伦一区二区三区视频| 爸爸入狱以后妈妈双人桥小权| 国产猛烈高潮尖叫视频免费 | 日本久久三级电影院| 亚洲AV色无码乱码在线观看| 顶级欧美做受XXX000| 欧美性色黄大片手机版| 西西里大但人文艺术~任汾| 中国少妇精品久久久久无码AV| 高清偷拍一区二区三区| 久久久久亚洲精品天堂| 亚洲AV永久无码精品漫画| 国产精品免费AV片在线观看| 免费XXXXX大片在线观看一区 | 天国少女免费观看| 亚洲色成人网站www观看入口| JULIA无码人妻中文字幕在线| 久久人与动人物A级毛片| 日韩人妻潮喷中文在线视频| MM131亚洲国产美女久久| 免费无码AV一区二区三区| 无码中文字幕在线播放2| 最新国产免费AV片在线观看| 久久久久 亚洲 无码 AV 专| 亚洲精品成人久久AV| 顶级CSGO大片| 人人妻人人爽人人人少妇| 97精品伊人久久大香线蕉| 男生和女生在一起差差差| √天堂资源中文WWW| 免费观看日本XXXXX视频高潮| 在公交车上弄到高C了公交车最后| 久久久久久久无码高潮| 野花日本HD免费高清版7| 国产精品久久久久久无毒不卡 | 亚洲欧洲日产国码中文字幕 | 中国熟妇色XXXXX| 麻豆AV一区二区三区久久| 无码人妻精品一区二区桃蜜| 国产成人A区在线观看| 农村风流大炕作爱| 中文字幕无码毛片免费看| 好满射太多了装不下了APP| 亚洲AⅤ国产成人AV片妓女| 成人国产精品一区二区免费| 日本漂亮妈妈7在观有限中子| 菠萝蜜一线二线三线品牌| 日韩精品少妇无码受不了| 丰满少妇人妻HD高清大乳在线| 少妇久久久被弄到高潮| 国产精品国产三级国AV| 性av 丰满av 无码av| 精品高潮呻吟99AV无码视频| 天美传媒MV在线看免费| 国产精品色吧国产精品| 亚洲AV中文无码字幕色三| 国产精品乱码久久久久久小说 | 午夜精品久久久久久久| 亚洲欧美在线制服丝袜国产| 东北骚妇老熟女DHXⅩXXX| 美日韩一区二区三区| 97久久精品人人爽人人爽蜜臀| 青青草无码伊人久久| 公和熄小婷乱中文字幕| 新版孕妇BBWBBW| 九九精品国产亚洲AV日韩| 尤物99国产成人精品视频| 欧美人与性囗牲恔配| 顶级欧美做受XXX000| 亚洲AV成人中文无码专区| 久久精品人妻一区二区三区| 97久人人做人人妻人人玩精品| 人人妻人人爽人人澡欧美二区| 国产AⅤ无码专区亚洲AV麻豆| 日本畜禽CORPORATION| 国产成人无码精品久久二区三区 | 性欧美VIDEOFREE高清潮| 久久精品无码AV| AV天堂午夜精品一区二区三区| 上边一面亲下边一面膜的功效| 国产午夜鲁丝片AV无码| 无人区码一码二码三MBA| 精品国产福利一区二区| 18禁H漫免费漫画无码网站国产| 日产乱码一二三区别免费一| 国产人成视频在线观看| 无线乱码一二三区免费看 | 欧美黑人成人www在线观看| 中文字幕乱码一区二区三区免费| 人妻丰满熟妇A无码区| 国产乱人伦中文无无码视频试看| 亚洲一二三四2021不卡| 人人爽亚洲AⅤ人人爽AV人人片| 国产乱子夫妻XX黑人XYX真爽 | 欧美黑人极品猛少妇色XXXXⅩ| 国产成人精品综合在线观看 | 乱码一线二线三线新区破解欧 | 50岁露脸老熟女88AV| 为了升职丈夫把我献给他们领导 | 影音先锋男人资源站| 日产中文字幕在线精品一区| 极限少妇人妻无石久久电影网| 98久9在线 | 免费| 无码精品人妻一区二区三区中 | 精品无人区乱码1区2区3区在线| 亚洲精品无码久久不卡| 精品久久一区二区乱码| 亚洲综合色区另类小说| 日韩一区二区三区AV| 国产精品无码午夜免费影院| 曰本女人牲交视频视频免费|