• ベストアンサー

禁止ワードに設定できない文字

CGIROOM で配布されている CGI機能拡張用のプログラム『ワードチェック』 (伝言板などに禁止ワードを設定できる) …を利用しているのですが、 これ↑に"登録することができない単語 (つか、文字)"…って、ありますか?? 例えば「半角カンマは駄目」とか。。。 「半角スペースを入れちゃ駄目」とか。。。 登録する単語の数に制限は無いので、 沢山登録したら、…最近、何を書いても 禁止ワード扱いされ、投稿が出来なく なってしまいました~(^_^;) ■備考■ my $word=<<'WORD'; 馬鹿 死ね! ウンチ WORD ↑こんな風に『my $word=<<'WORD';』 と『WORD』の間に、投稿されたくない単語 を書くようになってます。

  • CGI
  • 回答数6
  • ありがとう数7

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

  • ベストアンサー
  • leaz024
  • ベストアンサー率75% (398/526)
回答No.4

大事なのは「どの単語がダメなのか」ではなく、「なぜダメな単語があるのか」だと思うんですよ。 それさえ分かれば、プログラムを直して、思い通りに動かすことができるようになるわけです。 そんなわけで前回のアドバイスは、 > その単語を消せば正常に動くようになる… などという身もフタもないことを言うための布石ではなく、「プログラムをこうすれば直りますよ」というアドバイスのためのものだったんですよ。 (もちろん、「私が責任もって直します」というものではありませんが^^;) で、   「ダメな原因」を探るためには、その「プログラムの検証」が必要 なんですが、   「検証」するためには、「ダメと分かっている単語」が必要 なんですよ。 プログラムの方はダウンロードすれば済むわけですが、ダメな単語を1から探すのは大変だなぁと思ったわけです。 「消せばいいや」というつもりで、「何が悪いの?」と聞かれているだけならば、「同じ経験をし、見つけ出した人」しか答えられないのではないかと思います。 ただ、技術屋から言わせれば、「原因を知らずして、全てのBadWordを挙げるのは不可能」です。 それともう1つ。 >> これは ' のままで大丈夫です。 > あっ。ありがとうございます♪ > そうですかー。…ぢぁ、例えば > 『s'e'x』←こんな単語を登録しても > 大丈夫!ってことですよね。 この ' の話は、「単語」として登録する部分の話ではなく、   my $word=<<'WORD'; という「プログラム」の方の話です。(WORD を囲んでいる ' のこと) 単語登録の方で注意すべきことは、 ・「WORD」というのを禁止ワードにできない ・ $ や @ (共に半角)を入れる場合、それぞれ \$、\@ と書かなければならない 事くらいだと思います。 後は何を書いても大丈夫なはずです。

yuka_chan
質問者

お礼

>> 「プログラムをこうすれば直りますよ」という >> アドバイスのためのものだったんですよ。 そうでしたか。申し訳ありませんでした! でも私、プログラムは絶対に書き換えたくないのです(T-T) ( このことを質問文の方に補足しておくべきでしたね。) 書き換えようとしたら、いつも失敗しちゃうから。 ・・・なんかでも、皆様からのご回答を読む限りでは 結局『使えない単語は無いはず』ってことみたいで。。。 じゃあ私が禁止ワードを書き変える際などに誤って プログラムの一部を削除してしまったのかもしれないです。 (以前にもそういうことがあったから。) もう1度DLするところからやり直してみたいと思います。 何度もありがとうございました。 そしてスミマセンでした。m(_ _)m

その他の回答 (5)

  • leaz024
  • ベストアンサー率75% (398/526)
回答No.6

sun_supinel さん、ご指摘ありがとうございます。 > my $word=<<'WORD'; > とシングルクォーテーションでくくってるのでエスケープしなくても大丈夫では? > $も@も問題なく使えそう。 そうですね。 普段、裸で使ってばかりなんで、すっかり忘れてました^^; # 回答の種類に「お礼」が欲しいところです。

yuka_chan
質問者

お礼

「お礼」が遅くなってしまい、 本当にごめんなさい☆(謝ってばっか(笑)) 私なりにチョット落ち込んでしまって… スグにレスしたら感情的になって しまいそうな気もしたので、 少し時間を置くことにしたのです(^-^;) お騒がせしました。。。

回答No.5

一点だけ、、、。 >$ や @ (共に半角)を入れる場合、 >それぞれ \$、\@ と書かなければならない my $word=<<'WORD'; とシングルクォーテーションでくくってるのでエスケープしなくても大丈夫では? $も@も問題なく使えそう。 でもどうすれば質問のような状況になるのか知りたいっす、、、。 ということで、原因となった(追加した)語句を教えてもらえないでしょうか?

yuka_chan
質問者

お礼

ご回答ありがとうございました♪ >> 原因となった(追加した)語句を >> 教えてもらえないでしょうか? それが・・・全く分からないのです。 自分で探すのには、恐ろしく時間がかかってしまいそうで。。。 (だからここで質問させて頂くことにした) 怪しげな単語いっぱい使ってます。 …あ。今思い出しましたが、前に 全角のアンダーバーを登録した時は駄目だったような気がします。 その時は、「全てが禁止ワード扱いされる」っていうような 症状ではなく、CGIのページ自体がエラーで表示されなくなりました。 でも、アンダーバーを消したら直りました☆ あと、特殊記号も駄目ですよね?? 今回の場合は、「なんか最近、禁止ワードじゃないのに、 禁止ワードになっちゃうことがあるな~」って気がしてきて、 でもあんまり気にせず、それからも時々登録を繰り返してたんです。 そしたら、だんだん禁止ワード扱いされる率が高く なってって、 (その時には全然投稿できなくても、時間を置くと直ってたり。) …で、気づいたら駄目になってました。 『今日イキナリ駄目になった!』っていうのだったら、 「原因は、あの単語かな?」って想像もつくのですが、 徐々になってったんで、もーー全然分からないのです。。。 協力できなくてごめんなさい。 そして、ありがとうございました!m(_ _)m

  • yuizuian
  • ベストアンサー率42% (103/245)
回答No.3

>>> これは ' のままで大丈夫です。 や、申し訳ない。 嘘ついてしまいました。 >つまり『使えない単語はプログラムによって >マチマチだから、具体的に「この文字は駄目」 >とかは分からない(自分で地道に探すしかない)』 >…って解釈で宜しいのでしょうか。(謎) ちょっと(大分?)違います。 >>> 禁止ワードの判定部分はどうなっているんですか? >「禁止ワードの判定部分」って何ですか? 正規表現はご存知ですか? $QUERY =~ /$word/ の部分です。 ここでマッチングを行う際に、文字コードを誤って判別してしまう単語が$wordに含まれているのでしょう。 #詳しくは #http://www.din.or.jp/~ohzaki/perl.htm#JP_Match 上記URLのサンプルを元に作成した物ですが、 if($QUERY =~ /$word/){ の部分を、 $ascii = '[\x00-\x7F]'; $twoBytes = '[\x8E\xA1-\xFE][\xA1-\xFE]'; $threeBytes = '\x8F[\xA1-\xFE][\xA1-\xFE]'; if ($QUERY =~ /^(?:$ascii|$twoBytes|$threeBytes)*?(?:$word)/i) { にしてみてはどうでしょう? 「SEX」「sEx」「sex」の3つに1度にマッチングさせることもできます。 #全角・半角の判別は、また別の方法になります。 他には$wordの中身を配列に格納してindex関数で1つずつ調べる…なんて方法もありますが、 大文字小文字の区別はつけられません。 どちらにせよ改造になりますから、もしかしたら配布もとのサポート対象外になってしまうかもしれませんので ご自身の責任の元書き換えてみてください。 >ん~~~。す・すみません☆☆ >その手間を惜しんでの質問でした||(-_-;)||| >『この質問のような内容って実は割と常識かな? >ここで聞けば皆さんが教えてくださるかな? >だったら、それが1番ラク。。。』って感じで。(汗;) 質問する者のマナーをもう少し学ばれた方が良いのでは…(^^;

参考URL:
http://www.mirai.ne.jp/~mikeneko/yuibot/yuibot/faq/faq2.html#c4,http://www.din.or.jp/~ohzaki/perl.htm#JP_Match
yuka_chan
質問者

お礼

>> 正規表現はご存知ですか? 本当にごめんなさい。 全くの無知なのです。||(-_-;)||| >> ご自身の責任の元書き換えてみてください。 壊れたら嫌だし、せっかく詳しく 教えて頂いたのに申し訳ないですが、 プログラムを書き換えることはせず 地道に探してみることとします。。。 >> 質問する者のマナーをもう少し学ばれた方が 仰る通りですね。 いろいろ複雑な問題だったとも知らず。 私はテッキリ、これはCGI界では常識で… 『○と○と○は使えませんよ♪』 みたいな答えがソッコーで返ってくる ものとばかり考えておりましたので。 すみませんでした…m(_ _)m

  • leaz024
  • ベストアンサー率75% (398/526)
回答No.2

> 沢山登録したら、…最近、何を書いても禁止ワード扱いされ とのことですが、まずは「どの単語を入れるとまずいのか」を特定しましょう。 半分ずつ削って行けば、容易に特定できると思います。 また、悪さをしている単語は複数かもしれませんから、その辺にも注意されるとよいでしょう。 この手の問題は、「文字コード」と「マッチング(正規表現)」の問題であることが多いので、入れるとまずい単語を特定して、「この単語を入れると動作がおかしい」と言ってくれると、回答/アドバイスも付きやすいのではないかと思います。 ちなみに、No.1 の yuizuian さんの回答にある、 > my $word=<<'WORD'; > の場合クォーテーション(') > は\'と書かないといけなかったと思います。 についてですが、これは ' のままで大丈夫です。 (逆に \' と書いてしまうとエラーになってしまいます。)

yuka_chan
質問者

お礼

ご回答ありがとうございました☆ つまり『使えない単語はプログラムによって マチマチだから、具体的に「この文字は駄目」 とかは分からない(自分で地道に探すしかない)』 …って解釈で宜しいのでしょうか。(謎) >>「この単語を入れると動作がおかしい」 >> と言ってくれると、回答/アドバイス >> も付きやすいのではないかと思います。 ん~~~。す・すみません☆☆ その手間を惜しんでの質問でした||(-_-;)||| 『この質問のような内容って実は割と常識かな? ここで聞けば皆さんが教えてくださるかな? だったら、それが1番ラク。。。』って感じで。(汗;) それと「この単語を入れると動作がおかしい」 ってのを自分で調べた後だったら、その単語を 消せば正常に動くようになる…ってことだと思うので、 もう他には何も聞くことが無いです。。。 >> これは ' のままで大丈夫です。 あっ。ありがとうございます♪ そうですかー。…ぢぁ、例えば 『s'e'x』←こんな単語を登録しても 大丈夫!ってことですよね。 ※↑こんな風に文字の間に記号とか入れてきたりするんです。 オカゲで…例えば「sex」って単語だけでも、 「SEX」「sex」「sEx」「SEX」「s○x」「S・E・X」等々、 50パターンくらい登録しておかなければ意味が無い。。。 (…というか、「SEX」って沢山書いてスミマセン。 これじゃ私が荒らしっぽいですね。(溜息))

  • yuizuian
  • ベストアンサー率42% (103/245)
回答No.1

my $word=<<'WORD'; の場合クォーテーション(') は\'と書かないといけなかったと思います。 >登録する単語の数に制限は無いので、 >沢山登録したら、…最近、何を書いても >禁止ワード扱いされ、投稿が出来なく >なってしまいました~(^_^;) 禁止ワードに設定している文字がなくてもですか? 禁止ワードの判定部分はどうなっているんですか?

yuka_chan
質問者

お礼

ご回答、ありがとうございます☆ >> 禁止ワードに設定している文字がなくてもですか? はい。「設定してる文字が無くても」です!!(>_<) …あ。「文字」というか、「単語」ですよね?? >> 禁止ワードの判定部分はどうなっているんですか? う~~~。すみません。 「禁止ワードの判定部分」って何ですか? 何か分からないけど、『my $word=<<'WORD';』以外 の部分もココに貼り付けた方が良いでしょうか。 他にも何か思い出されましたら、 宜しくお願いしますぅ☆m(_ _)m

yuka_chan
質問者

補足

↓こんな風になってました。 ------------- package cgiroomwcheck; #発言禁止文字列 WORDまでなら何行でも追加OK my $word=<<'WORD'; ○○ △△ ◇◇ WORD #禁止ワード発言時の戻り先リンクURL my $url = 'http://***/***/***.cgi'; #jcode.plまでのパス my $require = './jcode.pl'; my($QUERY,@error); if($ENV{'REQUEST_METHOD'} eq 'POST'){ binmode(STDIN); read(STDIN,$QUERY,$ENV{'CONTENT_LENGTH'}); tie *main::STDIN, 'Scalar2handel',$QUERY; }else{ $QUERY = $ENV{'QUERY_STRING'}; } if($QUERY){ require $require; $QUERY =~ tr/+/ /; $QUERY =~ s/%(..)/pack('C', hex($1))/eg; jcode::convert(\$QUERY,'euc'); jcode::convert(\$word ,'euc'); $word =~ s/[\r\n]+$//; $word =~ s/([^\w\r\n])/\\$1/g; $word =~ s/[\r\n]+/|/g; if($QUERY =~ /$word/){ print <<HTML; Content-type: text/html\n\n <HTML><HEAD><META HTTP-EQUIV="Expires" CONTENT="0"></HEAD> <BODY bgcolor="#FFFFFF" text="#FF0000"> <TABLE height="100%" width="100%"><TR><TD align=center><table alicn=center><tr><td align=center><tt>禁止コードが含まれている為、受理できません。<HR size=1><br><font size=5>[<a href="$url">戻る</a>]</font></TD></TR></TABLE></TD></TR></TABLE>system:<A href="http://cgiroom.nu" target=cgiroom>CGIROOM</A></BODY></HTML> HTML exit; } } # ダミーSTDIN 2001/10/11 package Scalar2handel; sub TIEHANDLE{ my $class = shift; my $self = { 'scalar' => shift , 'position' => 0 , }; $self->{'length'} = length($self->{'scalar'}); bless $self , $class; } sub READ { my $self = shift; my($undef,$len,$offset) = @_; $offset += 0; my $position = $self->{'position'}; $len < 0 && die "Negative length\n"; my $tmp = $position + $len; $self->{'position'} = $tmp if $position >= $tmp ; $_[0] = $offset > 0 ? " " x $offset : ""; $_[0] .= substr($self->{'scalar'},$position ,$len); length($_[0]) } sub READLINE { my $self = shift; my $position = $self->{'position'}; return undef if $self->EOF; if(wantarray){ $self->{'position'} = $self->{'length'}; substr($self->{'scalar'},$position); }else{ $self->{'position'} = index( $self->{'scalar'} , $/ , $self->{'position'} ) + 1; $self->{'position'} = $self->{'length'} if $self->{'position'} == 0; $.++; substr( $self->{'scalar'} , $position , $self->{'position'} - $position ); } } sub GETC { my $self = shift; if($self->{'position'} + 1 <= $self->{'length'}){ substr($self->{'scalar'},$self->{'position'}++,1) } } sub SEEK { my( $self , $position , $whench ) = @_; if($whench == 0){ if( $self->{'length'} >= $position ){ $self->{'position'} = $position }else{ return 0 } }elsif($whench == 1){ my $tmp = $self->{'position'} + $position; if($tmp >= 0 && $tmp <= $self->{'length'}){ $self->{'position'} = $tmp }else{ return 0 } }elsif($whench == 2){ my $tmp = $self->{'length'} + $position; if($tmp >= 0 && $tmp <= $self->{'length'}){ $self->{'position'} = $tmp }else{ return 0 } }else{ return 0 } return 1 } sub EOF { $_[0]->{'position'} == $_[0]->{'length'} ? 1 : 0 } sub TELL { $_[0]->{'position'} } sub BINMODE { 1 } sub CLOSE{ $. = 0; } sub WRITE { push(@error,"WRITE に対応しておりません\n") } sub PRINT { push(@error,"PRINT に対応しておりません\n") } sub PRINTF { push(@error,"PRINTF に対応しておりません\n") } sub FILENO { push(@error,"FILENO に対応しておりません\n") } END { print "<div align=right><!--\n@error--><font size=1><a style='TEXT-DECORATION:NONE' href='http://cgiroom.nu'>Word checker v1.10</a></div>" if @error; } 1; ----------------- …長い。(汗;) てか、これって、もしかしたら違反?? 無断転載?とか著作権?とかの。。。 ※駄目だったら消してください。>管理人さん

関連するQ&A

  • 禁止ワードの設定

    禁止ワードを設定して、その禁止ワードの一つと投稿内容が一致したら 投稿を拒否したくて以下のように記述したところ、 禁止ワードではない言葉でもエラーが表示されてしまいました。 どこか記述が違うのでしょうか? @tokumeikinshi = ("アホ","バカ");#禁止ワードのリスト if((my $body)or(my $name)or(my $subject) = @tokumeikinshi){ &::error(\'禁止ワードが含まれています');{exit;} }

    • 締切済み
    • CGI
  • コンマ(,)を入力を禁止させたい

    お世話になります。 フリー配布のCGI(Perl)をちょっと改造しているのですが カンマを禁止したり別の文字に置き換えたりって 方法ありますか? コンマで区切っているタイプのCGIなので、 訪問者さんが本文中にコンマを入力して データがズレまくってしまいます; 禁止ワードにすればいいのかと思って if($in{"name"} ~ /,/ ){ &error('コンマの使用は禁止されています'); } と、入れてみたらエラーになってしまいました; 何か方法ありませんか? よろしくお願いします。

    • ベストアンサー
    • 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
  • 「えれべ~たぁ」の禁止ワード機能

    有名な「Tarcy's Room」のCGIプログラム「えれべ~たぁ」を自分で改造して、投稿禁止ワードの機能をつけたいと思ってます。 しかし、ここ数日トライしているのですが、上手くいきません。 ソースも美しく、カンタンにこの機能を付け加えることは可能でしょうか? どなたかご教授下さい。 参考URL「Tarcy's Room」 http://tackysroom.com/

    • ベストアンサー
    • CGI
  • 入力禁止文字の設定方法について・・・VB?SQL?

    初歩的な質問でしたらすみません。。。 VB6でSQLServer2000のDBを操作しています。 入力フォームの「名称」欄に「'」「,」半角のアポストロフィやカンマの入力をすると、 SQLのテーブルへ書き込み時にエラーとなってしまいます。 「名称」のため、半角の「'」「,」は禁止にして、全角の「’」「,」は入力可能にしたいです。全角半角の判別可能なのでしょうか? フォームで[登録]ボタンを押した時に「名称」欄に「'」「,」が含まれているかのチェックをしたいのですが、 「'」「,」文字をどの様に記述してチェックをすればよろしいのでしょうか。 どなたかご存知の方ご教授いただけたらと思い質問させていただきました。 どうかよろしくお願いいたしますm(_ _)m

  • 禁止ワードの複数設定方法について

    あんQというスクリプトを利用しているのですが、荒しやスパムが酷く禁止ワードを設けたいと思いサポート掲示板にてその話題があったので早速導入してみました http://lounge.suepon.com/data/pastlog-1164603809.html 現状、不具合なく更に何の問題もなく運営でいているのですが、正規表現等の知識も無いもので複数の禁止ワードを設定する際にかなり面倒になっています sub antispam { $i=index($mesnew,"馬鹿");#名前、項目名、コメントなど if ($i>=0){ &error("ご利用どうも。");} $i=index($mesnew,"あほ");#名前項目名、コメントなど if ($i>=0){ &error("ご利用どうも。");} $i=index($mesnew,"糞");#名前、url、項目名、コメントなど if ($i>=0){ &error("ご利用どうも。");} } というように、記載しているのですが設定しておきたいワードがかなり多い事と、随時スパムや荒しがあった時に対処する為にスクリプト最上部に設定項目を設ける、別ファイルの禁止ワード集を読み込む等の処理をしておきたいのです $i=index($mesnew,"馬鹿 あほ"); としても駄目で、 $i=index($mesnew,"馬鹿,あほ"); としても駄目でどうしたら良いのかも分からず、右往左往しております できれば、 $no_wd = '馬鹿,あほ'; 等というように、スクリプトの最上部に色々設定項目のある箇所で設定したいのです 色々と調べてみたのですが、限界にきてしまい投稿させて頂きました よろしくお願い致します

    • 締切済み
    • CGI
  • 迷惑投稿排除の為のアダルト用語の一覧…って

    ホームページに設置している掲示板へのアダルト関連の迷惑投稿が あまりにも多くて困っています。英文投稿はcgiの「英文のみの投稿禁止」で 排除できたのですが、日本語のアダルト関連は禁止ワードを設定しただけでは 追いつかず、現在見つけるたびに削除している状態です。 禁止ワードに、考えられるだけのアダルト用語を入れておこうかとも 思ったのですが、「ナース、女子高生…」と打ち込む気力がありません。 そのような関連の言葉の一覧で、一つずつを半角の「,」で区切ってある リストなど、そのままコピペして禁止ワードに貼ればいいだけ、の状態に なっているものというのはどこかに無いでしょうか? よろしくお願いします。

  • CGI掲示板~禁止ワード追加カスタマイズ

    やっとここまでできました。 前回の質問の後に追加できないので、新たに投稿します。 詳しい内容は前回の質問を見て下さい。 なんとか独自で以下のように禁止ワードを設定できましたが、 最高でも18個が限界のようです。あとはエラーが出ます。 これを好きなだけ設定する方法を教えて下さい。 初期設定の中に追加 ↓↓↓ ## 禁止文字 @haijyo = ( ,'殺' ,'死' ,'宣伝' ,'無修正'); 実際の登録処理の中に追加 ↓↓↓ # 禁止処理 foreach $haijyo (@haijyo) { if ($comment =~ /$haijyo/) { &error('コメントに禁止ワードがあるようです'); } } foreach $haijyo (@haijyo) { if ($name =~ /$haijyo/) { &error('名前に禁止ワードがあるようです'); } } foreach $haijyo (@haijyo) { if ($title =~ /$haijyo/) { &error('タイトルに禁止ワードがあるようです'); } } foreach $haijyo (@haijyo) { if ($risou =~ /$haijyo/) { &error('希望する相手に禁止ワードがあるようです'); } } ここまで必死にきました。宜しくお願いします。

    • 締切済み
    • CGI
  • Ranking Link Ver.1.71で不正登録される

    Ranking Link Ver.1.71というランキングのCGIをレンタルサーバーで動かしているのですが、禁止ワードや禁止URLを設定しても、出会いサイトに不正登録されてしまいます。 先週から新規登録フォームのページを削除したのに、それでも登録されてしまいます。 サーバーかCGIの管理画面のパスワードが破られている?パスワードは定期的に変更しているのですが、どうしても不正登録されてしまいます。 どうやら、不正登録を簡単に行えるツール等があって、ウチのサイトがカモられているようです。 どなたか経験者の方、アドバイスいただけないでしょうか? よろしくお願いいたします。 CGI配布元 ttp://dream.lib.net/room/cgi/e_ranklink.html

    • ベストアンサー
    • CGI
  • IME辞書 半角数字の単語登録

    すみません、検索してみたのですがみつからなかったのでどなかた教えてください。 IME2007で単語登録をしているのですが、半角数字のみの単語を登録したところ、 変換候補にカンマがはいったものや漢数字の候補がでてきてしまいます。 例えば、111111という単語を登録したら、11万1111や111,111など。 これをなくすことはできないでしょうか?邪魔なので。 ちなみに品詞は顔文字で登録したのですが、全角の候補もでてきてしまいます。 アドレスなども品詞顔文字で単語登録していますが、こちらの変換候補は半角だけでてきます。 パソコンはXPでOffice2007を使っています。 よろしくお願いいたします。

専門家に質問してみよう