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