こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

javascriptと連携したフォーム送信

フォーム送信(メールフォーム)に関する質問です。

フォームの入力チェックをJavascirptのバリデータライブラリで行い
送信だけPHPを使用するというタイプのメールフォーム作成を考えています。

必須入力、正規表現によるチェックなどをJavascript側でやるので

・PHPではPOSTされた値を受け取って、htmlspecialchars・mb_ereg_replaceあたりで変換した後メール関数に渡す。値がなければエラー

これでいいんじゃないかと思うのですが、甘いでしょうか?

javascriptの無効状態による送信は、

・Javascriptでhiddenかクッキーを出して、有効無効を判断
(hiddenのvalueかクッキーがPHPで受け取れなければJavascript無効状態での送信としてエラー)

を考えています。
ご意見よろしくお願いします。

投稿日時 - 2008-03-17 20:39:45

QNo.3871582

暇なときに回答ください

質問者が選んだベストアンサー

JavaScriptでチェックするというのは、POST前に不備がわかるので間違ったときの余計な待ちがないというインタフェイスの問題だけですね。ANo.2さんが書かれたように、phpでも同じチェックをするのが基本です。

>保存されたらどんなプログラムもハックできてしまうのでは?

それを考えて「POSTされるデータはアテにしない」のが普通です。どんなおかしなデータがPOSTされるかわからないという前提でチェックします。

>たしかにjavascriptのコード送ってもメールじゃ動かないですが
>HTMLメールになったりするのでは、と思ってしまいます

htmlメールがどういう仕組みになっているか、一度「生のメールデータ」を読んでみることをお勧めします。mb_send_mailでhtmlメールが送れない理由がわかると思います。

投稿日時 - 2008-03-18 14:31:56

補足

確かにそうです<インタフェイスの問題だけ
利便性優先でセキュリティゆるゆるって例を晒しましたね…。
以後気をつけたいと思います。

>htmlメールがどういう仕組みになっているか~
アドバイスありがとうございます。確認してみます。

投稿日時 - 2008-03-18 18:22:51

お礼

お礼が遅れました。
javascriptのバリデータはおまけとして、PHP側で色々チェックをするように作ることにしました。
アドバイスありがとうございました。

投稿日時 - 2008-04-01 14:18:26

ANo.3

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

なんだかんだ工夫してJavaScriptでvalidateしても、結局はPHP側でも同じvalidateかけないと駄目ですよ

表示されたサイトのHTMLとJavaScriptを保存して、解読して強制的にPHPに悪意ある値をPOSTするように改変すれば、簡単にハッキングされてしまう可能性はありますよ。
メールを送信するのであれば、簡単にメールヘッダーインジェクションされてしまいます

しかも htmlspecialchars を使ってなにをするんでしょう?
HTMLのタグや特殊文字を排除したところでメールにはなんにも関係ないですよ
HTMLで悪意あるコードの排除するためのものであって、メールに関してはなんにもしてくれません。


hiddenだろうとcookieだろうと、結局は閲覧している人のパソコン内でどうとでも改変できますし、だますような値を送りつけることも可能です

投稿日時 - 2008-03-17 21:25:12

補足

>結局はPHP側でも同じvalidateかけないと駄目
やはり甘かったようですね。質問してよかったです。

ローカル保存は頭に無かったのですが、保存されたらどんなプログラムもハックできてしまうのでは?
そこでセッションなんでしょうか…
安全性に何が有効なのかがいまいち理解出来ません…。

htmlspecialcharsは参考に見たメール送信プログラムによく付けられてたからなのですが
メール送信ではなくてもいいのでしょうか?
たしかにjavascriptのコード送ってもメールじゃ動かないですが
HTMLメールになったりするのでは、と思ってしまいます

投稿日時 - 2008-03-18 10:29:56

お礼

htmlspecialcharsは確認画面表示するので結局つけることにしました。
でもデコードでver4系だとエラーが出てしまうのですね…難しいです。
アドバイスありがとうございました。

投稿日時 - 2008-04-01 14:20:23

ANo.1

#JavaScriptが無効になっている環境は切捨てということですか?

甘いというか「hiddenで渡した値でチェック」などはローカル保存されたhtmlからでもPOSTを許可することになるのでは?もちろんこの意味ではCookieでもじゅうぶんではないです。

チェックが必要なものであれば「JavaScriptでだけチェック」ということはあり得ません。phpスクリプトでも同様のチェックを必ず行います。ほとんどのケースでは無駄なチェックですが、この無駄を省いてはいけません。

投稿日時 - 2008-03-17 20:50:21

補足

あ、言われてみれば確かにそうですね…<ローカル保存

PHPでこれは絶対入れた方がいいというチェックはありますか?

投稿日時 - 2008-03-18 10:10:40

あなたにオススメの質問