2
2
3
3
Web開発の原則はユーザが入力したいかなる情報も信用してはならないということです。そのため、ユーザの入力した情報を検証しフィルターすることは非常に重要になってきます。ブログやニュースの中でどこそこのホームページがハッキングされたりセキュリティホールが存在するといったことをよく聞くかもしれません。これらの大部分はユーザの入力した情報に対してホームページが厳格な検証を行わなかった事によるものです。そのため、安全なWebプログラムを書くために、フォームの入力を検証する意義は非常に大きいのです。
4
4
5
-
6
5
Webアプリケーションを書く時は主に2つの方面のデータ検証があります。ひとつはページ上でのjsによる検証で(現在この方面では多くのプラグインがあります。例えばValidationJSプラグインなどがそうです)、もうひとつはサーバ側での検証です。この節ではどのようにサーバでの検証を行うか解説します。
7
6
8
7
## 必須フィールド
@@ -17,6 +16,8 @@ Webアプリケーションを書く時は主に2つの方面のデータ検
17
16
## 数
18
17
たとえば、フォームからある人の年齢が50歳や10歳といった具体的な値を必要としていて、"おっさん"とか"若者"というようなものでなかったとします。このようにフォームの入力フィールドの中で数字のみを許容するようにさせたい場合、整数かどうかを判断するために、まずint型に変換を行ってから処理を行います。
19
18
19
+ 正の整数を判断しようとする場合は、まずint型に変換してから処理を行います
20
+
20
21
getint,err:=strconv.Atoi(r.Form.Get("age"))
21
22
if err!=nil{
22
23
//数の変換でエラーが発生。つまり、数字ではありません。
@@ -45,8 +46,7 @@ Webアプリケーションを書く時は主に2つの方面のデータ検
45
46
}
46
47
47
48
## 英文
48
- あるユーザの英語名を知りたいときなど、フォームの要素から英語の値を取り出したい場合は、astaxieであってasta谢ではないはずです。
49
- (訳注:「谢」はピンインでxieと書く)
49
+ あるユーザの英語名を知りたいときなど、フォームの要素から英語の値を取り出したい場合は、astaxieであってasta谢ではないはずです。(訳注:「谢」はピンインでxieと書く)
50
50
51
51
簡単な正規表現を使ってデータを検証することができます:
52
52
@@ -66,12 +66,11 @@ Webアプリケーションを書く時は主に2つの方面のデータ検
66
66
67
67
68
68
## 携帯電話番号
69
- ユーザが入力した携帯電話番号が正しいか判断したい場合は以下の正規表現で検証できます:
69
+ ユーザが入力した携帯電話番号が正しいか判断したい場合は以下の正規表現で検証できます(訳注:中国の携帯電話番号) :
70
70
71
71
if m, _ := regexp.MatchString(`^(1[3|4|5|8][0-9]\d{4,8})$`, r.Form.Get("mobile")); !m {
72
72
return false
73
73
}
74
- (訳注:中国の携帯電話番号)
75
74
76
75
## プルダウンメニュー
77
76
フォームの中の` <select> ` 要素が生成するプルダウンメニューにおいて、ハッカーは時々このプルダウンメニューに無い項目を偽造してあなたに送りつけるかもしれません。このような場合値がもともと設定されたものであることを判断するにはどうすればよいでしょうか?
@@ -131,9 +130,9 @@ selectには以下の要素があるとします:
131
130
132
131
上の` Slice_diff ` という関数には私のオープンソースのライブラリが含まれます(sliceとmapを操作するライブラリ)[ https://github.com/astaxie/beeku ] ( https://github.com/astaxie/beeku )
133
132
134
-
135
133
## 日付と時間
136
- ユーザが入力した日時が有効か確認したいとします。例えば、ユーザがスケジュールで8月45日にパーティを開く予定を入力したり、未来の時間を誕生日にしてみたりといった場合です。
134
+ ユーザが入力した日時が有効か確認したいとします。例えば
135
+ 、ユーザがスケジュールで8月45日にパーティを開く予定を入力したり、未来の時間を誕生日にしてみたりといった場合です。
137
136
138
137
Goではtimeの処理パッケージを提供しています。ユーザの入力した年月日を目的の時間に変換してから、判断を行います。
139
138
@@ -143,7 +142,7 @@ Goではtimeの処理パッケージを提供しています。ユーザの入
143
142
timeを取得した後、多くの時間関数の操作を行うことができます。具体的な判断は自身の要件に合わせて調整してください。
144
143
145
144
## 身分証明書番号
146
- フォームに入力された身分証を検証する場合、正規表現を使っても簡単に検証できます。しかし身分証明書番号は15桁と18桁があるので2つとも検証しなければなりません。
145
+ フォームに入力された身分証を検証する場合、正規表現を使っても簡単に検証できます。しかし身分証明書番号は15桁と18桁があるので2つとも検証しなければなりません。(訳注:中国では身分証明書とともに個人を特定する国民背番号があります。)
147
146
148
147
//15桁の身分証明書の検証。15桁はすべて数字です。
149
148
if m, _ := regexp.MatchString(`^(\d{15})$`, r.Form.Get("usercard")); !m {
@@ -154,7 +153,6 @@ timeを取得した後、多くの時間関数の操作を行うことができ
154
153
if m, _ := regexp.MatchString(`^(\d{17})([0-9]|X)$`, r.Form.Get("usercard")); !m {
155
154
return false
156
155
}
157
- //(訳注:中国では身分証明書とともに個人を特定する国民背番号があります。)
158
156
159
157
以上よく使用されるサーバ側でのフォーム要素の検証をいくつかご紹介しました。このイントロダクションを通してGoによるデータ検証、特に正規表現での処理に対する理解が深まるよう願っています。
160
158
0 commit comments