亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

Yii2中的場景(scenario)和驗證規則(rule)的詳解

2020-03-22 19:05:50
字體:
來源:轉載
供稿:網友
Yii2的rule用于對模型屬性進行驗證,scenario用戶定義不同場景下需要驗證的模型,下面這篇文章主要給大家介紹了關于Yii2中場景(scenario)和驗證規則(rule)的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下。

前言

場景,顧名思義,就是一個情景,一種場面。在yii2中也有場景,這個場景跟你所理解的場景含義差不多。

和用戶有交互的系統必不可少的功能包括收集用戶數據、校驗和處理。實際業務中,往往還需要將數據進行持久化存儲。出于安全考慮,開發人員應當牢牢把握“客戶端的輸入都是不可信”的準則,客戶端傳過來的數據先進行過濾和清洗后再存儲或傳遞到內部系統。

Yii2推薦使用Model類來收集和校驗用戶數據,持久化的ActiveRecord類是其子類。Model類的load和validate兩個方法,分別用來收集和校驗客戶端數據。哪些數據應該被收集,哪些數據需要在什么場景下驗證,便是本文的主題:場景(scenario)和驗證規則(rule)。

下面話不多說了,來隨著小編一起看看詳細的介紹吧。

系統結構

先引入一個簡單的業務系統:系統中存在學生和教師兩種角色,數據庫中使用了三張表保存角色信息:

user: [id, username, password, status, 其他通用屬性]

student: [id, user_id, student_no, grade, html' target='_blank'>class, 其他學生屬性]

teacher: [id, user_id, work_no, title, telphone, 其他教師屬性]

實際業務不限于對這三張表的增刪查改操作。為了簡化問題,后續僅討論user和student兩張表的數據變更(給出teacher表是為了讓讀者不認為設計數據庫的人是腦殘:明明可以放到一張表的,為什么要拆開!)。

學生報名

學生報名是典型的增刪查改操作,送分題。學生報名的簡要代碼示例如下:

public function actionSignup() $data = Yii::$app- request- post(); $user = new User(); $user- load($data); if ($user- save()) { $student = new Student([ user_id = $user- id, $student- load($data); if ($student- save()) { // redirect to success page } else { $user- delete(); // render error page}

相信有Yii2使用經驗的人都能根據數據庫的字段約束快速的把User和Student類的rules方法寫出來。例如User類文件內容可能如下:

namespace app/models;class User extends /yii/db/ActiveRecord public function rules() return [ [[ username , password , status ,], required ], [ username , unique ], // other rules // other method}

定義數據的驗證規則,這是大多數人對rules的第一印象,并且是一個很好的印象:它打回非法的數據,讓正常的數據進入系統中。安全的實踐應該盡量定義完整的規則,充分驗證數據。也建議每一個Yii2開發人員對內置的核心校驗器熟悉。

修改信息

修改信息,也是典型的增刪查改操作。實現代碼和報名差別不大,這里僅討論兩點:

1、用戶密碼的驗證

注冊時會校驗用戶密碼是否8-16位,密碼的規則可能是: [ password , string , length = [8, 16]] 。明文保存密碼是不可取的,插入數據庫時至少會做MD5加密,password變成32位。假設用戶修改信息時未修改密碼,再次保存時密碼規則校驗出錯(長度不符合),無法保存!

怎么解決這個問題呢?翻閱Yii文檔,發現了規則中的when屬性可以救場。一種可能的驗證規則是:

public function rules() return [ [ password , string , length = [8, 16], when = function ($model) { return $model- isNewRecord; // other rules ];

只有在注冊(新增數據)時才校驗密碼字段。問題解決,完美!

2、防止用戶私自改密碼

假設有個小聰明的家伙(例如湯姆),發現系統是用Yii框架做的,想搞點小破壞炫耀一下水平。在發送修改信息的表單時,湯姆增加 password=12345678這一段數據。系統使用$user- load($data)收集用戶輸入,更新password字段,帶來如下后果:rules設置更新時不校驗密碼字段,12345678直接作為password的值保存到數據庫中。這個操作帶來連鎖反應:用戶再次登錄時,加密過后的密碼與數據庫中的明文密碼不匹配,導致湯姆無法登錄系統。煩人的是湯姆是個刺頭,登錄不上后整天騷擾客服,不省心!

怎么樣防止這種情況出現呢?一種解決的方法是阻止修改密碼:

unset($data[ password ]); $user- load($data);// 或者$password = $user- password;$user- load($data);$user- password = $password;

把用戶輸入的密碼過濾掉,私自修改密碼的問題就解決了。

但是問題還沒有結束:湯姆可以轉向修改其他字段,比如說性別,身份證等。更嚴重情況是修改student中user_id,就可以更改任意學生的信息。事情十分嚴重,需要馬上修復漏洞。

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品国产自产在线老师啪| 中文字幕日韩欧美精品在线观看| 精品人伦一区二区三区蜜桃免费| 九九视频直播综合网| 久久久精品久久久| 色综久久综合桃花网| 日韩中文字幕在线视频| 欧美中文字幕视频在线观看| 欧美精品免费在线观看| 日韩在线观看免费网站| 久久综合88中文色鬼| 亚洲欧美综合精品久久成人| 国产91精品黑色丝袜高跟鞋| 深夜福利日韩在线看| 日韩黄色高清视频| 97精品国产aⅴ7777| 国产精品流白浆视频| 国产成人亚洲精品| 一区二区亚洲欧洲国产日韩| 成人在线中文字幕| 黑人巨大精品欧美一区二区| 91产国在线观看动作片喷水| 国产成人欧美在线观看| 午夜精品福利视频| 亚洲第一精品自拍| www.亚洲男人天堂| 狠狠色狠狠色综合日日小说| 国产欧美一区二区三区视频| 精品久久久久久久久久| 国产成人精品久久| 永久555www成人免费| 亚洲精品视频在线观看视频| 欧美激情一区二区三区在线视频观看| 国产精品一区二区久久精品| 中文字幕一区电影| www日韩欧美| 国产婷婷97碰碰久久人人蜜臀| 亚洲片在线资源| 亚洲精品国产福利| 亚洲色在线视频| 欧美午夜激情小视频| 亚洲精品日韩久久久| 亚洲黄色有码视频| 亚洲精品第一页| 中文字幕日韩精品有码视频| 国产精品久久久久久久久久三级| 热99精品里视频精品| 欧美高清理论片| 国产区精品视频| 欧美日韩中文在线| 91黑丝在线观看| 欧美在线播放视频| 日韩精品在线免费播放| 久久精品99久久久香蕉| 国产成+人+综合+亚洲欧洲| 欧美激情va永久在线播放| 日韩欧美精品中文字幕| 欧日韩不卡在线视频| 国产成人综合精品| 精品久久久久久久久久国产| 亚洲国产精品999| 日韩一区二区三区国产| 热99在线视频| 欧美大学生性色视频| 另类色图亚洲色图| 亚洲精品自在久久| 欧美成人中文字幕在线| 亚洲18私人小影院| 亚洲天堂av在线播放| 98精品在线视频| 国产精品视频地址| 欧美成人免费观看| 色爱精品视频一区| 久久躁日日躁aaaaxxxx| 久久精品一偷一偷国产| 中文字幕最新精品| 国产一区二中文字幕在线看| 日本精品视频在线| 亚洲偷熟乱区亚洲香蕉av| 97久久精品人搡人人玩| 日韩欧美中文字幕在线播放| 欧美视频专区一二在线观看| 亚洲色图在线观看| 国产精品亚洲第一区| 日韩av网址在线| 亚洲高清免费观看高清完整版| 国产欧美日韩精品在线观看| 国色天香2019中文字幕在线观看| 亚洲精品视频中文字幕| 久久综合免费视频| 亚洲视频在线播放| 国产精品久久久久久久久久久久久| 国内精品久久影院| 欧美精品videossex88| 国模视频一区二区三区| 亚洲色图在线观看| 亚洲人成伊人成综合网久久久| 精品成人69xx.xyz| 亚洲欧美日本精品| 黄色精品在线看| 97超碰国产精品女人人人爽| 亚洲激情自拍图| 国产日韩综合一区二区性色av| 欧美激情18p| 亚洲影院色无极综合| 欧美孕妇孕交黑巨大网站| 精品性高朝久久久久久久| 亚洲精选一区二区| 国产精品久久电影观看| 久久男人的天堂| 亚洲欧美日韩一区二区在线| 国产v综合ⅴ日韩v欧美大片| 久久久久成人网| 亚洲jizzjizz日本少妇| 91手机视频在线观看| 国产成人精品久久二区二区| 高清在线视频日韩欧美| 久久久之久亚州精品露出| 成人日韩在线电影| 96精品久久久久中文字幕| 国产美女久久精品| 久久成人精品一区二区三区| 91高清视频免费观看| 国产性猛交xxxx免费看久久| 91av视频在线免费观看| 亚洲色图偷窥自拍| 中文字幕欧美日韩在线| 日韩av在线看| 亚洲自拍欧美另类| 国产成人精品在线视频| 亚洲成人999| 亚洲精品国产综合久久| 91九色国产社区在线观看| 欧美性猛交xxxx久久久| 欧美一级淫片播放口| 91在线视频九色| 日韩精品免费在线视频| 成人免费看吃奶视频网站| 日韩av免费看| 日韩av在线播放资源| 国语自产精品视频在免费| 一区二区三区在线播放欧美| 精品国产91久久久久久| 色偷偷av亚洲男人的天堂| 国产精品入口免费视频一| 欧美日韩成人在线视频| 一区二区亚洲精品国产| 成人免费自拍视频| 欧美与欧洲交xxxx免费观看| 国产suv精品一区二区三区88区| 日韩在线视频免费观看| 九九久久久久99精品| 国模极品一区二区三区| 国产精品久久久久久久一区探花| 成人中心免费视频| 欧美精品久久久久| 久久99精品久久久久久琪琪| 国产视频999| 欧美性猛交99久久久久99按摩| 97热精品视频官网| 国产精品激情自拍| 色综合色综合久久综合频道88| 欧美精品精品精品精品免费| 欧美国产日本在线|