小编给大家分享一下yii中csrf的验证机制,希望大家阅读完这篇文章之后都有所收获、下面让我们一起去探讨吧!
<强>跨站请求伪造强>(英语:跨站点请求伪造),也被称为>/* * ,* Returns 从而token used 用perform CSRF 验证。 ,*返回用于执行CSRF验证的令牌 ,*却;能够token is a masked version of [[rawCsrfToken]],用prevent (BREACH 袭击)(http://breachattack.com/)。 ,*却;能够token may be passed along via a hidden field of an HTML form 或是an HTTP header 价值 ,*用support CSRF 验证。 ,* @param boolean  regenerate 美元;whether 用regenerate CSRF 令牌只When 却;能够parameter is 的确,each 时间 ,*却;能够method is ,, a new CSRF token will be generated 以及persisted (cookie session 拷贝,或是)。 ,* @return string 从而token used 用perform CSRF 验证。 ,*/public function  getCsrfToken (regenerate 美元;=,假) { ,,,if ($ this→_csrfToken ===, null | |,再生美元),{ ,,,,,,,if (regenerate 美元;| |,($ token =, $ this→loadCsrfToken ()),===, null), {,,,//loadCsrfToken()就是在饼干或者会话中获取令牌值 ,,,,,,,,,,,token 美元;=,$ this→generateCsrfToken(),,,,,,,,,//如果标记为空则调用generateCsrfToken()去生成 ,,,,,,,} ,,,,,,,//,,mask 并# 39;t need 用be 非常随机的 ,,,,,,,chars 美元;=,& # 39;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_ -强生# 39;; ,,,,,,,mask 美元;=,substr(作用(函数($字符,5)),,0,,静态::CSRF_MASK_LENGTH); ,,,,,,,//,,+,sign may be decoded as blank space 后来,which will fail 从而验证 ,,,,,,,这个→美元_csrfToken =, str_replace(& # 39; + & # 39;,, & # 39;强生# 39;,,base64_encode (mask 美元;只$ this→xorTokens(令牌美元,,面具))); ,,,} ,,,return $ this→_csrfToken; }/* * ,* Loads 从而CSRF token 得到cookie 一、会话。 ,* @return string 从而CSRF token loaded 得到cookie 一、会话只Null is returned if 从而cookie 一、会话 ,* does not  have CSRF 令牌。 ,*/protected function  loadCsrfToken () { ,,,if ($ this→enableCsrfCookie), { ,,,,,,,return $ this→getCookies ()→getValue ($ this→csrfParam),,,,,,,,,,//cookie中获取csrf的token ,,,},{else ,,,,,,,return Yii:应用程序→美元getSession()→得到($ this→csrfParam),,,,,,,,,,,//会话中获取csrf的令牌 ,,,} }/* * ,* Creates a  cookie with a randomly generated CSRF 令牌。 ,* Initial values  specified [[csrfCookie]],拷贝will be applied 用,generated 饼干。 ,* @param string  token 美元;从而CSRF 令牌 ,* @return Cookie 从而generated 饼干 ,* @see enableCsrfValidation ,*/protected function  createCsrfCookie(令牌) { ,,,options 美元;=,$ this→csrfCookie; ,,,选择美元[& # 39;名字# 39;],=,$ this→csrfParam; ,,,选择美元[& # 39;价值# 39;],=,美元令牌; ,,,return new 饼干(选项); }/* * ,* Generates , an unmasked random token used 用perform CSRF 验证。 ,* @return string 从而random token for CSRF 验证。 ,*/protected function  generateCsrfToken () { ,,,token 美元;=,Yii:应用程序→美元getSecurity ()→generateRandomString(),,,,,,,//生成随机的安全字符串 ,,,if ($ this→enableCsrfCookie), { null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null