通過引入基於正規表示式的基本使用者檢驗,您現在應該已經簡要了解了 cakephp 資料檢驗。通過定義自己的正規表示式來執行資料檢驗,可以在 tor 內練習進一步控制各個表單字段的成功/失敗條件。
資料庫設計
table
create table
users
create table `users` (
`id` int(10) not null auto_increment,
`username` varchar(40) not null,
`password` varchar(40) not null,
`email` varchar(255) not null,
`first_name` varchar(40) not null,
`last_name` varchar(40) not null,
primary key (`id`),
unique key `username` (`username`),
unique key `password` (`password`)
) engine=myisam default charset=utf8
user 模型
1 23 4
5 67 8
9 10
11 12
classuserextendsappmodel
?>
這是乙個好的開始,但還不夠。需要確保字段長度不超出限制並且這個使用者名稱尚不存在。這需要定義自己的用於檢驗的正規表示式,並定義在儲存使用者前在 users 表中查詢使用者名稱的函式。
正規表示式
正規表示式(regular expression)是在對乙個字串與另乙個字串進行比較時使用的字元模式。例如,正規表示式中的字元 * 將匹配任意字元任意次數。如果不了解正規表示式,請不必擔心。下面的示例應當能幫助您入門。
定義自己的檢驗
cakephp 提供了一些內建的資料檢驗正規表示式,包括 valid_not_empty、valid_number、valid_email 和 valid_year。這些常量都是在 cake/libs/validators.php 中定義的並且不應該修改。您可能會發現這些常量會有幫助。
對於使用者名稱和密碼字段,需要確認提交的資料長度不超過 40 個字元。檢驗使用者名稱和密碼的長度不少於 6 個字元也會有幫助。用於匹配長度在 6 至 40 個字元之間的字串的正規表示式類似於 /^.$/。從左至右閱讀這個正規表示式:
/— 表示正規表示式的開頭 ^— 表示字串的開頭 .— 表示任意乙個字元 — 表示至少 6 個字元,但不能超過 40 個字元 $— 表示字串結束 /— 表示正規表示式結束
因此,連在一起讀,這個正規表示式的意思就是 「從字串的開頭開始,有至少 6 個但不超過 40 個字元,然後字串結束」。
請將出現 valid_not_empty 的地方替換為用單引號包圍的正規表示式(為了阻止 php 嘗試解釋任何特殊字元)。
1 23 4
5 67 8
9 10
11 12
classuserextendsappmodel
$/',
'password'=>'/^.$/',
'email'=> valid_email
); }
?>
確保儲存所有檔案,返回到 然後嘗試用乙個具有 4 個字元的使用者名稱註冊使用者。
注:正規表示式可以實現許多功能,但不能執行檢查使用者名稱是否已註冊之類的操作。
進一步檢驗
有時,無法僅僅檢視資料就判斷出它是否有效。例如,使用者名稱可能在 6 至 40 個字元之間,但還必須檢查資料庫來檢視這個使用者名稱是否已被占用。cakephp 提供了可將字段手動標記為無效的功能。看看下面的 beforevalidate 方法。這個方法應該新增到user 模型中。
1 23 4
5 67 8 9
functionbeforevalidate()
} returntrue; }
這個方法告訴模型,在執行任何檢驗之前,應該檢查提交的資料是否有 id。如果沒有 id,就尋找使用者名稱相同的其他使用者。如果找到這樣的使用者,就將使用者名字段標為無效,並跳過其他檢驗(返回 false)。通過將 register.ctp 檢視中的使用者名稱輸入行改為如下**,就可以啟用這個功能。
1 2
echo $form->input('username', array('after' => $form->error
('username_unique', 'the username is taken. please try again.')));
這告訴 register 檢視,在遇到錯誤訊息 『username_unique』(在 beforevalidate 方法中設定)時應該做什麼。
儲存檔案,然後嘗試操作。首先,訪問 以獲取現有使用者列表。然後訪問 隨後嘗試建立乙個具有相同使用者名稱的使用者。就會看到如下效果:
the username is taken. please try again.
良好的資料檢驗是建立任何安全應用程式的重要步驟。在構建 tor 應用程式的過程中,要尋找改進資料檢驗的機會。不要害怕引入比本教程更多的資料檢驗。決不要假定使用者會把所需的資料傳送給您。檢驗一切內容。cakephp 可以幫助您輕鬆完成。
python正規表示式裡引入變數
import re def reg exp senten jiqiren 阿童木 matchobj1 re.search r 你 男 女 機器 男 女 男的 男 女的 女 什麼 性別 senten,re.m re.i matchobj2 re.search r str jiqiren 名字 姓名 叫...
基於Perl的正規表示式實踐
說明 該部分來自 google hacking for penetration testers 第三版第四章的自動細化的內容 目標 找出文字中的郵箱位址 url以及ip位址 perl指令碼 usr bin perl usage search.pl file to search wordlist us...
python正則 python正則表達
正規表示式是一種用來匹配字串的強有力的 設計思想是用一種描述性的語言來給字串定義乙個規則,凡是符合規則的字串,就認為它 匹配 否則就不匹配。一 可以通過幾類符號設計限定規則,常用的思想如下 匹配除換行符以外的任意字元 w匹配字母 數字 下劃線或漢字 w匹配字母 數字 下劃線或漢字以外的字元 s匹配任...