- ベストアンサー
メールフォームセキュリティについての質問
- PHPを使ったメールフォームのセキュリティについての質問です。入力された文字をhtmlspecialcharsでエスケープして表示し、メール送信前にhtml_entity_decodeで再変換していますが、これはセキュリティ上問題があるでしょうか?
- PHPのメールフォームでセキュリティについての質問です。htmlspecialcharsで入力された文字をエスケープして表示し、メール送信前にhtml_entity_decodeで再変換していますが、これはセキュリティ上問題があるのでしょうか?
- PHPを学んでいる初心者ですが、メールフォームのセキュリティについて質問があります。入力された文字をhtmlspecialcharsでエスケープし、メール送信前にhtml_entity_decodeで再変換していますが、これはセキュリティ上問題があるのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> 単にデータをそのままメール送信する場合は必要ないとの理解で > 良ろしいでしょうか? そゆことです。 htmlspecialchars は 雑に言ってしまえば フォームに入力された文字などに、 HTMLタグに使用されている特殊文字(「<」とか「>」とか)が入っていた場合、 タグとして誤認識させないために入れておくものです。 試しに、以下のスクリプトで htmlspecialchars がある場合と、ない場合で 挙動を 比べてみてください。 htmlspecialchars の意味が分かると思います。 <?php $str = "'><script>alert('hogeeeeee')</script><'"; // ない時 //print "<input type=text name=title value='" . $str . "'>"; // ある時 print "<input type=text name=title value='" . htmlspecialchars($str , ENT_QUOTES) . "'>"; ?>
その他の回答 (2)
- bm_hiro
- ベストアンサー率51% (200/388)
度々すみません。 ふと思ったのですが、HTMLメールの場合は、htmlspecialcharsしないとまずいのかもしれません。 これに関しては、俺も よく分かりませんので、ご注意ください。
- bm_hiro
- ベストアンサー率51% (200/388)
んーとですね、大雑把に言ってしまうと、 POSTされてきたものを、いきなりhtmlspecialcharsしてやる必要はないんです。 ブラウザに表示する時にhtmlspecialcharsしてやればいいんです。 ↓みたいな感じに。 print "<input type=text name=title value='" . htmlspecialchars($_POST[title]) . "'>"; 内部で扱っているだけの部分までhtmlspecialcharsしてしまうから、 メール送信の時に 再度 逆変換かけないといけないという状況に。。
補足
bm_hiro様 ご回答ありがとうございます。 html_entity_decodeの一行以外は ほぼサンプル本の記事そのままだったのですが、 必要なかったんですね。 ということは、送信前の確認画面などで入力されたデータを ブラウザ上に表示する場合にはエスケープが必要で、 単にデータをそのままメール送信する場合は必要ないとの理解で 良ろしいでしょうか?
お礼
bm_hiro様 ご回答ありがとうございます。 また、サンプルまで表記していただきありがとうございました。 htmlspecialcharsの使いどころについて少し理解できました。 HTMLメールの場合は確かにそうですね。 念頭にありませんでしたが、調べてみます。 ありがとうございました。