### CSRF配置
1、/system/config/csrf.php配置文件中,默認是開啟CSRF驗證的。當開啟驗證時,所有的表單數據都會通過CSRF進行驗證。
2、CSRF驗證開啟時,在表單中必須創建一個標簽:{{ csrf_field() }} 創建此標簽后,系統會自動將表單中的數據由此提交并進行驗證。相當于此標簽會獲取當前表單對象,然后通過此對象獲取其中所有的數據,再對已經設置了要驗證的字段進行驗證。
### CSRF驗證設置
1、在表單提交的頁面上設置CSRF驗證
1.1 要進行驗證的字段,注意是二維數組,可以設置多個字段
Validate::make([ //設置驗證字段
['us',required, '用戶名不能為空', 3 ] //需要驗證的字段
,['pd',required, '密碼不能為空', 3 ]
]);
1.2 驗證字段的參數(以上代碼為例):
'us'、'pd' 這兩個是要驗證的字段名稱
required 這是驗證規則,有多種,具體查看文檔
"用戶名不能為空" 這是當驗證不通過時的提示信息
3 這是驗證條件 ,具體看文檔,共有5種,3為必須驗證
2、自定義驗證方法:將第二個參數換成一個方法。可以是匿名的方法。
['us',function($value){alert();}, '用戶名不能為空', 3 ]
$value此參數系統會自動傳入,是要驗證的項目的值;
function(){}是自定義的處理方法,可以寫我們自己的解決辦法
### CSRF驗證不通過的處理
1、當驗證不通過時有3種處理方式,這與/system/config/error.php配置文件有關,即validate的取值方式。
1.1 validate=show 此時是調用系統內的信息提示框,顯示驗證錯誤信息
1.2 validate=redirect 此時是跳轉到指定的處理頁面
1.3 validate=default 此時是由用戶自行處理
2、第1種方式直接顯示沒有什么可說了的。如上設置后,如果驗證不通過就會跳轉到提示信息頁面,然后返回。
3、跳轉到指定頁面的處理方式也沒有太多可說,基本也是一樣,當驗證不勇冠時會按指定路徑跳轉。但有一點,此時會傳遞一個包含錯誤信息的變量數組:$errors 這個數組中的內容就是設置CSRF驗證項時設置的錯誤提示信息。注意是一個數組。此值可以輸送到指定的跳轉頁面,讓用戶自行來處理。
4、用戶自行處理方式。此種方式下為用戶提供了2個方法:
if(Validate::fail()){
View::with(['errArray'=>Validate::getError()]);
}else{
echo "用戶名:".$_POST['us']."<br>密碼:".$_POST['pd'];
}
Validate::fail() //判斷驗證是否通過
Validate::getError() //獲取驗證不通過的錯誤信息
這樣做的好處就是例子中的使用方法,當驗證不通過時,將錯誤的信息傳送到接收處理頁面,讓用戶判斷怎么處理。
### 小結
1、/system/config/csrf.php配置文件中是否打開CSRF驗證,默認是打開的。打開時必須在表單中增加指定的標簽。
2、當在表單中設置了指定的標簽后,系統中的IS_POST就可以使用了。就在其存在的前提下設置CSRF驗證的項目內容等相關信息。
3、/system/config/error.php配置文件是錯誤信息處理配置。設置好相應的模式,根據配置設置處理方法。
(這里有個小問題:配置文件一旦修改,整個網站都會變,應當??)
4、只要開啟CSRF驗證,只要驗證不通過都會有錯誤信息,第3中設置的不同只是系統如何處理錯誤信息的問題,不管你怎么處理,錯誤信息都是存在的。第一種中,將錯誤信息自動傳送到了message方法顯示;第三種方法,用戶可以通過給定的方法,獲取錯誤信息、將信息傳遞到指定地方進行處理。第二種方法中,自動將第三種方法中用戶的處理方式自動傳送到了指定的跳轉頁面。
### 復制自動驗證的設置參數
required 必須輸入
email 郵箱
http 網址
tel 固定電話
phone 手機
zipCode 郵政編碼
num 數字范圍 如:num:20,60
range 長度范圍(位數)如 :range:5,20
maxlen 最大長度如:maxlen:10
minlen 最小長度如:minlen:10
regexp 正則如:regexp:/^\d{5,20}$/
confirm 兩個字段值比對如:confirm:password2
china 驗證中文
identity 身份證
unique 數據表值唯一如:unique:news,id (id為表主鍵)
exists 存在字段時驗證失敗
captcha 驗證碼
array(字段名,驗證方法,錯誤信息,驗證條件)
驗證條件 (可選):
1 有字段時
2 值不為空時
3 必須處理 (默認)
4 值為空時
5 不存在字段時處理