Yii2 功能非常强大,组件化编程很高大上,全栈编程很容易,但我以为平常的开发中仍是有很大一部分人会去手写表单之类的,为了配合前端的工做,或者懒得再去学这套堪比一门新语言的组件语法....html
Yii2默认是对表单采起 CSRF 验证的,近些年 CSRF 也愈来愈被人们所在乎,它比 XSS 更阴险更精明,有兴趣的能够百度下网络安全编程方面的相关知识,这里就再也不累述了。前端
若是是本身手写的表单,且没有关闭 Yii2 自身的 CSRF 验证的话,就会出现 “Unable to verify your data submission” 的错误提示,而网上千篇一概的都是教你如何关闭 CSRF 验证,我也是呵呵了,居心何在?安全编程要贯彻到底,若是你不想过几年被搞网络安全的挤下去么。有几篇教你如何使本身的表单符合 CSRF 验证,但都是 Yii 版本的,组件的写法都与如今的 Yii2 大有不一样编程
下面给出正确的表单写法安全
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>FormValidate</title> </head> <body> <div> <form method="post" action=""> <input type="text" name="username"> <input type="submit" value="submit"> <!-- _csrf --> <input type="hidden" name="<?= \Yii::$app->request->csrfParam; ?>" value="<?= \Yii::$app->request->getCsrfToken();?>"> </form> </div> </body> </html>
即在表单中添加一个 网络
name : app
\Yii::$app->request->csrfParam;
value:组件化
\Yii::$app->request->getCsrfToken();
的input hidden元素便可post
输出 request 组件其实就能看到一个公共的成员属性 spa
public $csrfParam = '_csrf';
固然你直接写也能够code