• 締切済み

Postmailの禁止ワードの改造

CGIに詳しい方ご指導の程宜しくお願い致します。 現在KENTWEB様のPostmailを使用しております。 その中の機能で【禁止ワード】というものがあり、 荒らし対策やスパム用として活用しているのですが 入力項目に禁止項目で設定した禁止ワードが入力されていて メールを送信しようとすると次のページで 【ERROR ! 禁止ワードが含まれています 】と表示されるのですが この【エラー文章】をどこの入力項目に入ってる文章が 禁止項目なのかを表示したいのです。 ただし何の文字が禁止ワードなのかが表示されてしまうと 荒らし対策やスパム対策にならないので、入力項目のみ 表示したいのですが、可能でしょうか? 大変乱文で説明が分かりにくい点もございますが何卒 ご指導の程宜しくお願い致します。 ■Postmailの動作サンプル http://www.kent-web.com/data/postmail/index.html ■Postmailダウンロード先 http://www.kent-web.com/data/index.html

みんなの回答

  • koma30007
  • ベストアンサー率87% (173/198)
回答No.3

『○○○に禁止ワードが含まれています。』などの メッセージを表示させたい場合は、「禁止ワード」 の所にある以下の行を if ($flg) { &error("禁止ワードが含まれています"); } 次のようにするだけで大丈夫のようです。 if ($flg) { &error("$_に禁止ワードが含まれています"); } ※『○○○に禁止ワードが含まれています。』の○○○ の部分は、送信フォームのHTMLで各入力欄に設定したname の値が反映されます。 ほとんど詳しくないので、複数あった場合にすべて表示 させる方法は分かりません。 一番最初に禁止ワードを見つけた段階で、エラーメッセ ージを表示するようですので、そのように改造するのは 難しいかもしれません。 どうしても出来ない場合は、メールの送信者には1つずつ 修正して送信してもらうと良いです。 カテゴリを変更して質問し直すと良い回答が得られるかも しれません。 次のカテゴリは技術者向けなので詳しい人がいるかも・・・ [技術者向] コンピューター > プログラミング > CGI あるいは [技術者向] コンピューター > プログラミング > Perl ※マルチ投稿にならないように、どちらか1つだけに 質問を投稿してください。

全文を見る
すると、全ての回答が全文表示されます。
  • snowize
  • ベストアンサー率27% (68/245)
回答No.2

すみません。引数の順番が間違っていました。  join(@err, ", ") ⇒ join(", ", @err) こちらが正しいみたいです^^; 普段Perlを書かないのにリファレンスもきちんと確認せず思い込みですらすらやってしまいました。これでもだめならちょっと上の方も試してみてくださいw;

参考URL:
http://www.rfs.jp/sb/perl/05/join.html
komham
質問者

補足

何度もご丁寧に有難う御座います!! 頂きましたタグを入れてみたのですが 【禁止ワード,禁止ワードに禁止ワードが含まれています 】 と2回繰り返してしまいます。 入力された禁止ワードは1つなのですが、これは何か自分の 設置方法が悪かったのでしょうか? また可能であればなのですが、入力された項目名を表示させる事は できませんでしょうか? ------------------------------------------------------------ (例)お名前の入力欄に【禁止ワード】があった場合・・・              ERROR !       お名前に禁止ワードが含まれています。 ------------------------------------------------------------ また複数あった場合も対応出来れば良いのですが・・・ ------------------------------------------------------------ (例)お名前、住所、お問い合わせ内容の入力欄に【禁止ワード】があった場合・・・               ERROR !        お名前、住所、お問い合わせ内容に         禁止ワードが含まれています。 ------------------------------------------------------------ 何度も何度もご親切に対応して頂き大変お手数をお掛けし 申し訳ございませんが何卒ご指導の程宜しくお願い致します。

全文を見る
すると、全ての回答が全文表示されます。
  • snowize
  • ベストアンサー率27% (68/245)
回答No.1

おそらく「名前に禁止ワードが含まれています!」などのように改造したいのだと思いますが、最低限のPerlの知識はお持ちと踏まえてよろしいでしょうか? 本当でしたらサンプルコードをそのまま使ってもらえればよいのですが、当方Rubyが専門でPerlは動作環境がない上にほとんど覚えてないときたもんで、間違いもご愛敬ということでどうぞよろしく。 最初に619行目からのサブルーチンを確認してください。 ここでフォーム情報が連想配列in、配列keyにそれぞれ格納されていることが分かります。 なので255行目から始まる禁止ワードの捜査にこれらの情報を加えてやればいいのではないかと思います。 foreach文で配列keyの中身を順次確認していますので、一番簡単な手段は  "禁止ワードが含まれています" ⇒ "#{$in{$_}}に禁止ワードが含まれています" のように何の工夫もなく文字列を連結してしまうことだと思いますが、名前と本文の二カ所に禁止ワードが含まれていた場合は最初に見つけた禁止ワードしか通達してくれません。 それが不満でしたらエラーを見つけ次第サブルーチンを呼び出すのではなく、配列などにエラーメッセージをストックしておいてから最後にまとめて出力すればいいんじゃないかでしょうか。方法はいろいろあると思いますが…… # 禁止ワード if ($no_wd) {  local($err);  foreach (@key) {   foreach $nowd ( split(/,/, $no_wd) ) {    if (index($in{$_}, $nowd) >= 0) {     $err .= ", {$in{$_}}";    }   }   if (length($err) > 0) { &error("{$err}に禁止ワードが含まれています"); }  } } のように文字列として連結しちゃったり、 # 禁止ワード if ($no_wd) {  local(@err);  foreach (@key) {   foreach $nowd ( split(/,/, $no_wd) ) {    if (index($in{$_}, $nowd) >= 0) {     push(@err, $in{$_});    }   }   if (@err > 0) { &error(join(@err, ", ") . "に禁止ワードが含まれています"); }  } } のように配列にストックしておけばいいんじゃないでしょうか。後者の方が応用が利くかしら? なお上記ソースは全角スペースでインデントしていますのでタブ文字などに置換してください。 もし全然うまくいかないなんてことがありましたら改めてご連絡くださいまし。 自分の回答でウェブサイトが一層にぎわうようなら幸いです。

参考URL:
http://www.rfs.jp/sb/perl/
komham
質問者

補足

早急なご回答本当に有難う御座います。 この方法であっているのですが、下の方法を行うと 【,に禁止ワードが含まれています 】と表示されてしまい どの項目に禁止ワードがあるのか【,】だけ表示されてしまうのです。 行った方法は初期から存在する 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 # 禁止ワード if ($no_wd) { local($flg); foreach (@key) { foreach $nowd ( split(/,/, $no_wd) ) { if (index($in{$_},$nowd) >= 0) { $flg = 1; last; } } if ($flg) { &error("禁止ワードが含まれています"); } } } 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 をご指導頂きました方法 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 # 禁止ワード if ($no_wd) {  local(@err);  foreach (@key) {   foreach $nowd ( split(/,/, $no_wd) ) {    if (index($in{$_}, $nowd) >= 0) {     push(@err, $in{$_});    }   }   if (@err > 0) { &error(join(@err, ", ") . "に禁止ワードが含まれています"); }  } } 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 へと書き換えてアップロードをしてみました。 大変お忙しい中お手数をおかけ致しますが何卒ご指導の程 宜しくお願い致します。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Postmailの使用でメール受信がされません

    素人ですがどうぞよろしくお願いいたします。 KENTwebさん提供のフォームメールCGI(Postmail)を利用して、アンケートページを作成したいと考え、CGIの設置を行ったのですが指定したメールアドレスへの返信ができず困っています。 *KENTwebさん→http://www.kent-web.com/data/postmail.html 私が実行した手順の概要を示させていただきますと、 (1)CGI、sendmail可のレンタルサーバにKENTwebさんのページに記載してある要領に沿ってPostmailを設置しました。KENTwebさんのページのにあるように、postmail.cgi?mode=checkを末尾につけたチェックモードにて、全ての項目でOKが表示されましたので、CGIの設置は成功したのではと考えています。 *具体的に行った事としては、Perlのパス、sendmailのパスをサーバー指定にし、$mailto = "xxx@xxx.xxx"の部分を自分のメールアドレスに置き換えただけの措置です。 (2)次に、試しにサンプル(?)として同梱されているpostmail.htmlにて、 入力結果が指定のメールアドレスに送信されるかを試してみました。 postmail.htmlはこのようなページです→ http://www.kent-web.com/data/postmail/index.html 実際にレンタルサーバに自分でアップロードしたページにて、「送信する」をクリックしますと、「以下の内容でよろしければ送信ボタンを押して下さい。上記内容で送信」⇒「ありがとうございます。送信は正常に完了しました。」と表示されるにもかかわらず、結果が届きません。 (postmail.cgiの107行目の$mailto = "xxx@xxx.xxx";にてメール宛先を指定しているのですが受信ができません。) このような場合、どのような原因が考えられますでしょうか? FAQ等を見てみましたが該当が無いようでしたので、ご存知の方、どうぞよろしくお願いいたします。

    • ベストアンサー
    • CGI
  • 携帯向けフォームメール(postmail)

    KENTさんのところでお借りしたpostmailというCGIを携帯で使えるようにしようとしています。 http://www.kent-web.com/data/postmail.html エラー画面や入力確認画面で前に戻るボタンがありますが、onclickが使われているので携帯では動きません。 携帯のブラウザバックを使うと入力内容が消えてしまうので、出来れば他の方法で…と思ったのですが、何かいい方法はないでしょうか?

    • 締切済み
    • CGI
  • KENTWEB様のサイトより掲示板スレッド式「Web Patio」を借

    KENTWEB様のサイトより掲示板スレッド式「Web Patio」を借りて使用しているのですが、ワード検索において標準では「トピックス」と「名前」の項目しかありません。 KENTWEB:http://www.kent-web.com/bbs/index.html ここに「コメント(本文)」部分からも検索できるように追加したいのですが、分からなく困っています。 どうかよろしくお願いします。

    • ベストアンサー
    • CGI
  • Yahoo!ジオプラスで【CGI】postmail 設置について

    Yahoo!ジオプラスで【CGI】postmail 設置について Yahoo!ジオプラスでホームページを作っています。 ホームページに商品注文用フォームとお問い合わせフォームを 設置するため下記の「KENT WEB」さんのpostmailを使わせて頂きました。 http://www.kent-web.com/data/postmail.html 必要なパスは書き換え FFFTPからサーバーに無事アップ(自動転送)して確認のために フォームを入力すると、完了ページまでは表示されるのですが、 メールが送られてきません。 メールの送り先はヤフーメールです。 パーミッションは変更できないのでそのままです。 チェックモードでも確認しましたが、エラーは表示されません。

    • 締切済み
    • CGI
  • /web下のpostmailの不具合について

    /webの下にホームページをアップロードしてエクスプローラで動いてます。今度はkentさんのpostmailをアップロードして/webのなかにホルダーpostmailを作り全部入れました。もちろん、cgiの#!usr/bin/perl ,sendmailはusr/sbin/sendmailに設定。アドミションもちゃんとやりました。本体プログラムはhttp://www.hoge.com/postmail/postmail.cgiにしました。ところが、後ろに?mode=checkをつけてエクスプロラーでみるとpostmailをサーバーがまったく認識しません。ログファイルもサーバーパスも./postmail/data/log.cgiのように./postmailから書いてあります。何が悪いのでしょうか? それにあるサーバー会社のpostmailの解説に/var/www/html/postmailを発見しましたが何の意味かわかりません。kentさんの解説には出ていませんでした。誰か初心者に教えてください。 なおサーバーはアパッチのターボリナックス2.2.6です。httpdocsやcgi-binやhtmlガサーバーを開くと/webと並んであります。

    • 締切済み
    • CGI
  • KENT WEBのPostMail

    初めまして。 メールフォームを設置したいと思い、ここで「KENT WEBのPostMailがいい」と教えていただきました。 早速ダウンロードして設置してみたのですが、 うまくいかない部分があります……。 HP上にアップロードすることは出来たのですが、その画面で送信ボタンを押すと「Internal Server Error」というエラー画面が出ます。 それと、メールアドレスの入力を必須からフリーにしたいのですが、その場合はPostMail.cgiのどこを修正すればいいのでしょうか? 教えてください、お願いします。

  • KENT-webさんのPostmail URL表示について

    KENT-WebさんよりPostmailを設置し、問題なく稼動していたのですが、 フォームメールのページを開いたときのURLが http://~~~.com/postmail/postmail.html となっているところを http://~~~.com/contact/form.html としたいと思い、 フォルダとファイルの名前をそれぞれ変更したところ、 フォームメールの送信ができなくなってしまいました。 そのため名前を元に戻し、再度転送したのですが 転送自体うまくいかなくなってしまいました。 →フォームメールのページを開いたときのURLが Z:\フォルダ\postmail\postmail.html となってしまいます。 どのように対処したらよろしいでしょうか。 CGI初心者です。宜しくお願いいたします。

    • ベストアンサー
    • CGI
  • KENT-WEBのPostMailについて

    はじめまして。KENT-WEBさんで配布されているPostMaliを使用しております。 質問があるのですが、入力結果表示画面にて入力必須項目に指定した内容の並び順どおりに項目が表示されないという問題が発生しました。 入力フォームの内容はテキストボックス、チェックボックス、ラジオボタン、テキストエリアで構成されていますが、テキストボックスの並び順は入力必須項目で指定した通りの並び順で入力結果表示画面に表示され、テキストエリアとラジオボタンは入力必須項目で指定した並び順どおりに表示画面に表示されません(テキストエリアは値が入ってなくても常に入力結果表示画面の先頭に表示され、ラジオボタンは値が入ったときのみ入力必須項目で指定した並び順に従って入力結果表示画面に表示されます。)。 テキストエリアの並び順について、テキストエリアは常に表示結果の先頭に表示されるという現象はPostMailの仕様なのでしょうか。もし仕様でないとしたら、修正方法を教えていただけないでしょうか。よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • 禁止ワードのすり抜け対策

    現在、以下のようにして禁止ワードを設定しています。 httpという単語を禁止ワードにしているのですが この禁止ワードをすり抜けるために h t t pなどと書き投稿して利用者を悪質な出会い系サイトに誘導しようとする者がおり、困っております。 半角・全角スペースを使って禁止ワードをすり抜けようとする行為をン防止することは可能でしょうか? foreach (@deny) { if (index($FORM{'sender'},$_) >= 0) { &error("入力エラー","禁止ワードが含まれています。"); } if (index($FORM{'from'},$_) >= 0) { &error("入力エラー","禁止ワードが含まれています。"); } if (index($FORM{'sub'},$_) >= 0) { &error("入力エラー","禁止ワードが含まれています。"); } if (index($FORM{'comment'},$_) >= 0) { &error("入力エラー","禁止ワードが含まれています。"); } }

    • ベストアンサー
    • CGI
  • メールフォームから届くメールが文字化けしてしまいます・・・

    私の通ってる学際で利用するホームページを作ってます。アンケートフォームに無料cgiのpostmailというものをつかわさせてもらっています。 KentWeb http://www.kent-web.com/data/postmail.html ですが、設置したメールフォームから届くメールの一部が文字化けしてしまいます。 調べたら半角カタカナを入力すると文字化けするみたいです。 半角カタカナを入力しても文字化けしない方法を教えて下さい。又、これの他にいいメールフォームcgi(無料)があれば一緒に教えて欲しいです。 学際がもうすぐなのでできれば早く教えて欲しいです。 舞

専門家に質問してみよう