忍者ブログ

スイーツ(笑)と呼ばないで!!

NEW ENTRY
10 2024/11 1 23 4 5 6 7 8 910 11 12 13 14 15 1617 18 19 20 21 22 2324 25 26 27 28 29 30 12

11/24/09:49  [PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

05/12/03:09  Validatorのソースを読もう!!

前回、Form Request Validationについて書きました。

その中で、rulesメソッドに、例えば

public function rules()
{
 return [
  ‘title’ => ‘required|between:3,100’,
  ‘body’ => ‘required|min:10’,
  'url' => 'required|url'
 ];
}

こんな感じに書くとvalidationが簡単に書けることを紹介しました。

これは

・titleは必須で3文字以上100文字以下
・bodyは必須で10文字以下
・urlは必須でURLの形式

とかって意味になります。

超、簡単ですねー。

でも、何か気になりませんか?

URLの形式ってなんでしょう?

URLの形式チェックなら

◯ http://abc.com
◯ https://abc.com/def.html
☓ ttp://abc.com

なんとなく、無意識にこんな動きを期待しませんか?

でも、実は先頭のhが足らない

ttp://abc.com

はvalidationを通過します。

それどころか

hello://abc.com

とかでも通過してしまいます。つまり「:」の前は何でもOKなんですね。

これはValidatorのソースを読むとわかります。

ValidatorのvalidateUrlというメソッドの中では、

filter_var($value, FILTER_VALIDATE_URL)

というPHP標準関数を呼び出しています。

実はこの
FILTER_VALIDATE_URL
という指定ではrfc2396に準拠しているかは見ますが妥当なプロトコルを指定しているかまでは見ません。

したがって、
'url' => 'required|url'
というvalidation ruleの指定はwebサイトのURLチェックとしては不十分ということになるのです。

また、laravelにはactive-urlという似たような名前のvalidation ruleがありますが、こちらも注意が必要です。

これは最終的には実はそのホストのDNSのAレコードが存在するかというチェックだったりします。
興味のある人は是非ソースを読んでみてください。

ということで、今回のお話は、命名だけで信用せず、大事なところはソース読もうねー、というお話でした。

拍手[0回]

PR
URL
FONT COLOR
COMMENT
Vodafone絵文字 i-mode絵文字 Ezweb絵文字
PASS

TRACKBACK

TRACKBACK-URL