- ベストアンサー
PERL sendmailセキュリティ対策について
- Perlのsendmailを利用したメール送信時に発生するセキュリティ上の問題について質問します。
- sendmailを呼び出す前に入力内容をチェックするサブルーチンを通る方法を知りたいです。
- PERLの学習におすすめの参考書籍があれば教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
フローチャートを書いてみましょう。 それでは、エラーがなければ送信されますよね。 確認画面に、チェック用のinput hiddenでコードを含めて、そのコードがなければ確認画面を表示する。あれば送信とすれば良いです。 この値は、時間コードにしてチェックすると、時間をチェックできるでしょう。必要なら暗号化したものにしてチェックするとか。
その他の回答 (2)
- ORUKA1951
- ベストアンサー率45% (5062/11036)
No.1です。 簡単な方法のアドバイスを Perlの、__DATA__を使うと良いでしょう。 perlスクリプトの終了はソースの最後に __END__ でしたね。その後に書かれたものは、本体から<DATA>で利用することができます。 Perlスリスクリプトの最後に、今使用しているフォームを書いてその中にキー ワードを含めておきます。 入力がないとき、入力があってエラーがあるときは、whileで出力 エラーがないときは、確認画面のフォームを出力するとかです。 #!/usr/local/bin/perl ・・・スクリプト・・・ if($user-Time < $now + 20000 && $user-Time > $now){ ・・・・エラー処理・・・ $errorCount ++; # $error{'name'}の値を代入 $error{'name'} = '<strong style="color:red;font-weight:bold">名前が記入 されていません</strong><br& gt;'; } ・・・【中略】・・・ if $errorCount >0{ while(<DATA>) { s/\[nameError\]/$error{'name'}/g; s/\[now-Time\]/$time/g; s/\[USER_NAME\]/$in{'user'}/g; s/\[TEXT\]/$in{'name'}/g; print ; print "\n"; } } ・・・スクリプト・・・・ __END__ <html lang="la"> ・・・【中略】・・・ <form action="[THIS_FORM]" method="post"> <input type="hidden" name="keyword" value="[now-Time]"> ・・・【中略】・・・ [nameError] <input type="text" name="user" value="[USSER_NAME]" size="20"> <input type="text" name="name" value="[TEXT]" size="20">
- t-okura
- ベストアンサー率75% (253/335)
&SendMail($query) の直前でも &InputCheck($query, \@err_lst)) して、エラーがあれば、&SamePage($query) で入力ページに戻すというのではダメですか。
お礼
補足欄にお礼を書いてしまいました… 「お礼」欄にも同じ内容を入力いたします。すみません。 お礼が遅れて申し訳ありません。 入力ページに戻す方法も検討してみます。とすると、入力ページを表示させるフローの見直しが必要ですね… 難しい… もう少しがんばってみます。 ありがとうございました。
補足
お礼が遅れて申し訳ありません。 入力ページに戻す方法も検討してみます。とすると、入力ページを表示させるフローの見直しが必要ですね… 難しい… もう少しがんばってみます。 ありがとうございました。
お礼
ORUKA1951さん さっそくお応えいただきましてありがとうございます。 動的に変化するコードをHTMLに書き戻せばいいのですね! サブルーチンの呼び方ばかりに気がいってしまって、思いつきませんでした! それと、フローチャートを作って考えました。そうですよね。エラーがないんですから送信されてしまいますよね… ご指摘いただきました通り、 $tm=localtime() my $hh=$tm->hour; で、$hhをHTMLに書き戻し、 [確認画面を表示した時間]=[sendmailを呼んだ時間]でなかったら sendmailを呼べない、という仕様にしてみました。 でもこれだと、確認画面のソースをよくよく見ると、何を仕込んだかバレてしまう気がして 悩みます… もう少し工夫してみます。 ヒントを下さって、本当にありがとうございます!