掲示板スパム対策(改造)ガードキー効かず

このQ&Aのポイント
  • 掲示板スパム対策のためのガードキーの効果がない問題が発生しています。
  • ガードキーを入力しても書き込みができない状態です。
  • 他のルーチンとの兼ね合いが原因と考えられます。
回答を見る
  • ベストアンサー

掲示板スパム対策(改造)ガードキー効かず

二度目まして。 同掲示板で、ガードキー入力を必要とするようにしたいのですが、 うまく機能してくれません。 「0123」を入れても、書き込みできない状態です。 他のルーチンとの兼ね合いでしょうか??? #===============================記事をファイルに書き込むサブルーチン=========================== sub regist { #入力されたデータをチェックして、投稿者、コメント、メールアドレスが #入力されていなければエラーを出力し、再入力を促す if ($FORM{'name'} eq "") { &error(bad_name); } if ($FORM{'comment'} eq "") { &error(bad_comment); } if ($in{'guard'} ne "0123") { &error(bad_guard); } #スパム対策用●●●●●●●● #メールアドレスの未記入を許可する場合は、下の行の先頭に「#」をつけて無効にする #if ($FORM{'email'} ne "") { if (!($FORM{'email'} =~ /(.*)\@(.*)\.(.*)/)) { &error(bad_email); }} ~略~

  • nuoh
  • お礼率66% (367/548)
  • CGI
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • NINJA104
  • ベストアンサー率43% (133/306)
回答No.1

前後の行を見る限り、フォーム変数の一時取得先変数として $FORM{} を使っているCGIスクリプトであると推測されますので、 if ($in{'guard'} ne "0123") { &error(bad_guard); } #スパム対策用●●●●●●●● ↓ if ($FORM{'guard'} ne "0123") { &error(bad_guard); } #スパム対策用●●●●●●●● としてみては如何でしょうか。:-)

nuoh
質問者

お礼

あ、これでいけました! 前後の記述に沿わせたやり方で組まないといけないんですね。 ありがとうございます。(^u^)

関連するQ&A

  • 掲示板スパム対策(改造)1行追加でエラー

    書き込み文字が変換されるタイプの掲示板です。 1行追加、アップした後に、サーバーのエラーが出るのですが、 どこが悪いのかわかりません。 #HTMLドキュメントのヘッダー宣言 ~省略~ #投稿フォームを作成 ~省略~ print "<td align=center>名前</td>\n"; print "<td><input type=text size=34 name=name value=" . $COOKIE{'name'} . "></td>\n"; print "</tr>\n"; print "<tr>\n"; print "<td align=center>E-mail</td>\n"; print "<td><input type=text size=34 name=email value=" . $COOKIE{'email'} . "></td>\n"; print "</tr>\n"; print "<tr>\n"; print "<td align=center>見出し</td>\n"; #返信の場合は、見出しを挿入 if ($FORM{'flags'} eq 'return') { print "<td><input type=text size=34 name=subject value=RE:" . $FORM{'subject'} . "></td>\n"; } else { print "<td><input type=text size=34 name=subject></td>\n"; } print "</tr>\n"; print "<tr>\n"; print "<td align=center>内容</td>\n"; print "<td align=center><textarea name=comment rows=3 cols=34></textarea><br>\n"; if ($FORM{'flags'} eq 'return') { print "<input type=submit value=$FORM{'subject'}へ返信>\n"; print "<input type=hidden name=ress value=$FORM{'code'}>\n"; } else { print "<input type=submit value=新規投稿>\n"; } print "ガードコード<input type=text name="guard" size=8>\n"; #スパム対策用で追加●●●●●●●●●● print "</form>\n"; (TっT)

    • ベストアンサー
    • CGI
  • Perlでの複数行にわたるコメント

    Perlにおいて複数行コメントを記述するには =for comment コメントを記述 =cut と書けるとのことですが =for commentと=cutの間に 以下のように1行のコメントが記述されていても問題ありませんか? =for comment #名前をチェック if ($FORM{'name'} eq "") { $error .= "「名前」が入力されていません。$br"; } #タイトルをチェック if ($FORM{'title'} eq "") { $error .= "「タイトル」が入力されていません。$br"; } #コメントをチェック if ($FORM{'comment'} eq "") { $error .= "「コメント」が入力されていません。$br"; } =cut

    • ベストアンサー
    • Perl
  • htmlからcgiに変数を配列にして渡すとき

    フォームにて、質問1,2,3…と入力してもらい、 1を答えないで2を答えるとか、 2を答えないで3を答えるとかを排除したいので、 変数を配列にして受け取りたいのです。 とりあえず今のところはこうなってます。↓ #htmlファイル# <INPUT type="text" size="30" name="situmon[1]"> <INPUT type="text" size="30" name="situmon[2]"> ... としてcgiに持っていき、 #cgiファイル# for($i=1; $i<=4; $i++){ if($form{'situmon[$i]'} eq "" && $form{'situmon[$i+1]'} ne ""){ &error; #→エラーメッセージサブルーチン exit; } } のようにして受け取ろうとしてるのですが、うまくいきません。 上のようにhtmlではどう書くべきか、cgiではどう受け取るべきかを教えてくだされば嬉しいです。

    • ベストアンサー
    • CGI
  • cgiのカスタマイズが上手く行きません

    http://www.rescue.ne.jp/ のサイトにあります 「簡易データベース」http://www.rescue.ne.jp/cgi/database/ のカスタマイズが上手く行きません。 登録の項目を「名前」「星座」「血液型」に絞り登録をし、 「星座」「血液型」の項目選択で両方が一致した人の 「名前」を検索結果に出そうと思っています。 「改造箇所 index.html・・・フォームのカスタマイズ regist.html・・・フォームのカスタマイズ regist.cgi・・・#入力チェック部分、{'EMAIL'}の削除(未使用のため) search.cgi・・・      ($d,$NAME,$BLOOD,$BIRTH) = split(/\,/,$data);      とし、それぞれ $data = $data2 = $BASE[$num]; &jcode'convert(*data,'euc');      ($d,$NAME,$BLOOD,$BIRTH) = split(/\,/,$data); # 血液型 if ($FORM{'BLOOD'} ne 'all') { if ($BLOOD eq $FORM{'BLOOD'}) { ; } else { next; } } # 誕生日 if ($FORM{'BIRTH'} ne 'all') { if ($BIRTH eq $FORM{'BIRTH'}) { ; } else { next; } } と改造。と、最小限のカスタマイズをしたつもりですが、どうしても ●ご指定の条件では見当たりませんでした. となり、検索に引っかかりません。 データ自体はcsvedit.cgiで確認しても、登録はされているようです。 原因、お分かりになりますでしょうか? 何卒!何卒!よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • PHPフォームのスパム対策

    PHPフォームのスパム対策についてなのですが 氏名のふりがなをひらがな入力でチェックをしたいのですが 下記記述でうまくいきません。PHPの初心者なのでご教授いただけますでしょうか? ( PHPの一部抜粋ですが //20090403 in の箇所を追記しました。) //////////////// // メイン処理 // //////////////// if ($method == 3) { include($smtp_class); } @header("Content-Type: text/html; charset=EUC-JP"); if (isset($_POST['FORM'])) { //フォームからのデータを評価 if ($_POST['FORM']['NAME'] == "") { die('名前が入力されていません'); } //20090403 in if ($_POST['FORM']['FURIGANA'] == "") { die('ふりがなを ひらがなで入力してください。'); } if ($_POST['FORM']['EMAIL'] == "") { die('Eメールが入力されていません'); } if ($_POST['FORM']['MESSAGE'] == "") { die('メッセージが入力されていません'); } if (strlen($_POST['FORM']['MESSAGE']) > $max) { die('文字数が多すぎます'); } if ($_POST['FORM']['SUBJECT'] == "") { $_POST['FORM']['SUBJECT'] = '(untitled)'; //タイトルなしの場合 } //改行コードを<LF>に統一 $_POST['FORM']['MESSAGE'] = str_replace("\r\n", "\n", $_POST['FORM']['MESSAGE']); $_POST['FORM']['MESSAGE'] = str_replace("\r", "\n", $_POST['FORM']['MESSAGE']); //先頭と末尾のホワイトスペースを削除 $_POST['FORM']['MESSAGE'] = trim($_POST['FORM']['MESSAGE']); //メッセージ部分のフォーマット $_POST['FORM']['MESSAGE'] = "\n" . "----------------------------------------------------------------------\n" . $_POST['FORM']['MESSAGE']."\n" . "----------------------------------------------------------------------\n"; //メール本文の作成 $body = ""; //初期化 while (list($item, $value) = each($_POST['FORM'])) { if (get_magic_quotes_gpc()) { $value = stripslashes($value); } $body .= sprintf("%-8s", $item)." : ".$value."\n"; } //漢字コード変換( EUC → JIS ) if ($enable_EUCtoJIS) { $body = EUCtoJIS($body); $subject = '=?ISO-2022-JP?B?'.base64_encode(EUCtoJIS($_POST['FORM']['SUBJECT'])).'?='; $from_name = '=?ISO-2022-JP?B?'.base64_encode(EUCtoJIS($_POST['FORM']['NAME'])).'?='; $kana_name = '=?ISO-2022-JP?B?'.base64_encode(EUCtoJIS($_POST['FORM']['FURIGANA'])).'?='; } //20090403 in if (!mb_ereg("^[ぁ-ん]+$", $_POST['FORM']['FURIGANA'])) { $from = $kana_name." <".$_POST['FORM']['FURIGANA'].">"; } if (ereg("^[0-9A-Za-z._-]+@[0-9A-Za-z.-]+$", $_POST['FORM']['EMAIL'])) { $from = $from_name." <".$_POST['FORM']['EMAIL'].">"; } else { $from = $from_name." <".$to.">"; }    以下略 ------------ 御多忙のところ恐縮ですがよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • Javascriptで必須項目とメールアドレスチェックを同時に行いたいのですが…

    Javascriptで入力フォームの必須項目とメールアドレスのチェックを行いたいため、下記の様に設定したのですが、メールアドレスが入っているか確認後、メールアドレスのチェックを行うにはどのように書けばいいでしょうか?(現在は、Emailは必ず入力して下さい。Emailアドレスをご確認下さい。のalertが同時にでてしまいます。)宜しくお願いします。 <script type="text/javascript"> <!-- function FormCheck(Form) { Error = new Array(); i = 0; // 選択リストのチェック if ((Form["naiyou"]) && (Form["naiyou"][0].selected == true)) { Error[i] = "お問合せ内容を選択して下さい。"; i++; } // 名前の入力チェック if ((Form["name"]) && (Form["name"].value == "")) { Error[i] = "お名前は必ず入力して下さい。"; i++; } // emailの入力チェック if ((Form["email"]) && (Form["email"].value == "")){ Error[i] = "Emailは必ず入力して下さい。"; i++; } if ((Form["email"]) && (!Form["email"].value.match(/^[A-Za-z0-9]+[\w-]+@[\w\.-]+\.\w{2,}$/))){ Error[i] = "Emailアドレスをご確認下さい。"; i++; } // 未入力があればアラート if (Error.length > 0) { ErrorText = Error.join("\n"); alert (ErrorText); return false; } } // --> </script>

  • 確認のメールアドレスの比較の方法

    フォームメールなどで、メールアドレスを入力違いを防ぐため、2回入力させ、違う場合はエラーメッセージを表示させたいのですが、どのように 記述すればよいでしょうか? ちなみに今使っているのでは、以下のような形で入力項目をチェックしています。どうぞよろしくお願いします。 if ($namae eq "") { &error("名前が入力されていません");} if ($post eq "") { &error("郵便番号が入力されていません");} if ($pref eq "") { &error("県名が入力されていません");} if ($address eq "") { &error("住所が入力されていません");} if ($phone eq "") { &error("電話番号が入力されていません");} if ($phone!~ /^\d{2,5}-\d{1,4}-\d{4}$/) { &error("電話番号は半角数字でハイフォンで区切って入力して下さい"); } if ($email eq "") { &error("メールアドレスが入力されていません");} if ($email =~ /\s|\,/) { &error("メールアドレスの入力が不正です");} if ($email !~ /\b[-\w.]+@[-\w.]+\.[-\w]+\b/) { &error("メールアドレスは半角で正しくご入力ください");} #if ($email !~ /(.+)\@(.+)\.(.+)/) { &error("メールアドレスの入力が不正です");}

    • ベストアンサー
    • Perl
  • PHPで掲示板

    PHPでひとこと掲示板を以下の要件を満たすように作成しています。 ・利用者が名前とコメントを入力し、発言できる。 ・利用者の過去の発言内容をテキストファイルで管理する。 ・全ての利用者の過去の発言内容を一覧で表示する。一覧には「名前」「コメント」「発言日時」の3つを1行ずつ表示する。 ・利用者の名前は最大20文字以内まで発言できる。もし20文字より多くの文字を入力して発言した場合はエラーメッセージを表示し、発言できないようにする。 ・利用者のコメントは最大100文字以内まで発言できる。もし100文字より多くの文字を入力して発言した場合はエラーメッセージを表示し、発言できないようにする。 ・利用者の名前とコメントは必ず文字が入力される。もし名前あるいはコメントが未入力で発言した場合はエラーメッセージを表示し、発言できないようにする。 ・(ソースコード)比較演算子は、「===」や「!==」を利用すること 初心者なので、頭がこんがらがって意味が分からなくなってしまいました。以下のコードでおかしいところのご指摘をお願いします。また、よろしければ皆さんのプログラミングのオススメ学習法を教えていただけると幸いです。 <?php const FILE_NAME = './bbs.txt'; $date = date("Y-m-d H:i:s"); $log = ''; if ($_SERVER['REQUEST_METHOD'] === 'POST') { $name = $_POST['name']; // $comment = $_POST['comment']; // $log = $name . ':' . $comment . '-' . $date . "\n"; if (($fp = fopen(FILE_NAME, 'a')) !== false) { if ((mb_strlen($name) <= $name_max) && (mb_strlen($name) !== 0)){ print '名前は20文字以内で書いてください'; if (fwrite($fp, $name) === false) { print 'ファイル書き込み失敗'; } } fclose($fp); } if ($_SERVER['REQUEST_METHOD'] === 'POST') { // $name = $_POST['name']; $comment = $_POST['comment']; $log = $name . ':' . $comment . '-' . $date . "\n"; if (($fp = fopen(FILE_NAME, 'a')) !== false) { if ((mb_strlen($comment) <= $comment_max) && (mb_strlen($comment) !== 0)){ print 'ひとことは100文字以内で書いてください'; if (fwrite($fp, $log) === false) { print 'ファイル書き込み失敗'; } } fclose($fp); } $data = array(); if (is_readable(FILE_NAME) === true) { if (($fp = fopen(FILE_NAME, 'r')) !== false) { while (($tmp = fgets($fp)) !== false) { $data[] = htmlspecialchars($tmp, ENT_QUOTES, 'UTF-8'); } fclose($fp); } } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <h1>一言掲示板</h1> <form method="post"> <p>名前 : <?php if (mb_strlen($name)){?><input type="text" name="name"> <?php } ?> ひとこと : <?php if (mb_strlen($comment)){?><input type="text" name="comment"><?php } ?> <input type="submit" value="送信"> </p> </form> <ul> <?php foreach ($data as $value) { ?> <li> <?php print $value; ?> </li> <?php } ?> </ul> </body> </html>

    • ベストアンサー
    • PHP
  • 現在PHPの勉強をしています。初心者のためご教授いただければと思います

    現在PHPの勉強をしています。初心者のためご教授いただければと思います。 メールフォームを作成しており、エラーチェックで困っています。 簡単に流れを説明しますとフォーム画面で入力をしてもらったら確認画面へと移行します。 ここでエラーがあった場合、confirm.phpにてエラーチェックをし、form.phpに戻り、エラーがなければ確認画面にて入力した、項目が表示されるようにしたいと思っています。 ソースは下記のとおりになります。 form.php ---------------------- */ <html> <body> <form action="confirm.php" method="post"> 名前:<input type="text" name="name" value="" /<?php echo $errmsg['name'] ;?><br> 内容:<textarea name="comment" rows="5" cols="40"></textarea><?php echo $errmsg['comment'] ;?><br> <input type="hidden" name="contact" value="form" /> <input type="submit" name="submit" value="確認" /> </form> </body> </html> confirm.php ---------------------- */ <?php $name = $_POST['name']; $comment = $_POST['comment']; if(isset ($_POST['contact'])) { $errmsg = array(); if(empty($name)){ $errmsg['name'] = '未入力'; } if(empty($comment)){ $errmsg['comment'] = '未入力'; } if (count($errmsg) != 0) { header("Location: index.php"); exit; } } ?> <html> <body> 名前:<?php echo $name; ?><br /> 内容:<?php echo $comment; ?><br /> </body> </html> としております。 if (count($errmsg) != 0) { header("Location: form.php"); exit; 上記のようにするとエラーチェックの表示がされません。 require(form.php);にするとform.phpが表示されるのですがURLを見るとconfirm.phpの状態になっております。 header("Location: form.php");を使用してのエラーチェックをしたいのですが、どのように記述したらよろしいのでしょうか? 上記の内容でどなたかご教授いただけないでしょうか? 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • フリーメールは投稿できないようにする掲示板

    お世話になります。 フリーメールで投稿できないようにするにはどうしたら良いのでしょうか? 恥ずかしいくらいの初心者ですので宜しくお願いします。 (※フリーメールって言っても、一般的な5・6社程度ですが…) if ($in{'email'} eq "") { &error("メールアドレスが記入されていません"); } if ($in{'email'} eq "*@yahoo.co.jp") { &error("フリーメールは使えません"); } if ($in{'email'} eq "*@hotmail.com") { &error("フリーメールは使えません"); }  ・  ・ ワイルドカードの使い方も実はわからないのです。 宜しくお願い致します。

    • ベストアンサー
    • Perl

専門家に質問してみよう