[Web関連]スパム回避とスパム投稿のいたちごっこ「BBS」や「ブログのコメント欄」や「メッセージフォーム」などのように、「何かを入力して送信できる」仕組みをウェブ上に公開していると、スパム投稿がたくさんやってきます。スパムを回避する仕組みを用意することになるわけですが、「スパムを回避する仕組み」を回避してくるスパム投稿も徐々に増えてくるため、いたちごっこです。初期の頃は、それほど投稿数も多くなかった上に、投稿元のIPアドレスがほぼ固定だったので、IPアドレス単位でブラックリストに追加していけば対処できていました。今では異なるIPアドレスを大量に使い分けてくるのは当たり前なので、IPアドレスによるブロックは無意味です。20~30個くらいの大量投稿を一気に送ってくる場合でも、見事に全部異なるIPアドレスが使われていたりします。スパム業者は爆発すればいいのに......。(-_-)URLを含むとブロックたいていのスパムは、スパムサイトへの誘導やSEO効果の獲得が目的なので、URLを書かないと意味がないのですよね。『本文中にURLが含まれていたら問答無用で却下』という対策が取れるなら、そこそこ有効ではあります。(でも、中にはURLもメールアドレスも一切含まないスパムもあって、何が目的なんだろう?と困惑するものもあるんですが......。)でも、「投稿者のウェブサイトの情報は書けるようにしたい」という場合もあります。いう場合には、「コメント本文にURLを含めたらアウトだけど、専用の入力欄に1つだけ入力した場合はOK」のようにします。......が、まあ、そうすると当然、そっちにスパムサイトのURLを書いたスパム投稿が来るわけですね。(^_^;;;なので、URL以外の部分でスパムかどうかを自動判定させたいわけです。日本語が存在するかどうか日本語サイトで、日本語での投稿を前提とする場合には、『日本語が存在しなかったら却下』という手が使えます。これが、数年前まではわりと有効だったように思います。日本語の文字はたくさんありますが、文字コードでは「この番号からこの番号までが漢字」みたいな区切りがあるので、それを利用して「指定範囲内にある文字だけを許可する」のような処理ができます。単純に「2バイト文字があるかどうか」だけの判定でも十分な頃もありました。それらの方法で、英語だけとか、ロシア語だけ......といったスパム投稿は完全にブロックできていました。(外国からのスパムがたいてい英語だった頃は、英語スパムだけをターゲットにすれば良かったので、「this」・「that」みたいな頻出の英単語を禁止単語に指定しておくことでも、わりと自動対処できましたが。今ではロシア語とか中国語とかのスパムもたくさんあるので、その方法では不足です。)で、そのうち、本文中にほんの少しだけ2バイト文字(日本語文字など)を含ませたスパム投稿が出てきたんですよね......。すると、日本語文字の存在をチェックしているだけでは、判定をすり抜けてしまいます。平仮名が存在するかどうかなので、ちょっと制限を厳しくして、『ひらがなを1文字も含まない投稿は却下』という対策に変えることで、しばらくは有効でした。日本語の文章の場合、ひらがなを1文字も含まないことは(ほぼ)ないでしょうからね。句読点が存在するかどうかもっと厳しくして、『句読点を1文字も含まない投稿は却下』のようにすると、さらに有効でした。日本語による投稿であっても、驚嘆文と疑問文だけしか書かない場合には、文末に「!」と「?」が使われるので句読点が1文字もないことはあるかも知れませんが。(笑)あと、そもそも普段から句読点をまったく使わない人も居ますしね......。いう投稿の場合には、「句読点を書いてね」のような表示をすることで対処できます。戻って投稿し直す手間を掛けることにはなりますが、「句読点」という言葉の意味が分かれば、何を追加すれば良いのかは簡単に分かりますから。これが結構長い間有効だったように思います。!適当に拾ってきた文章を使ってくる!スパム業者の回避能力も年々向上していまして、最近は、「ネット上で適当に収集したそこそこ長い日本語文」を使って投稿してくるのですよ......。内容に全然脈絡はないんですが、日本語としては成立しているので、「日本語の有無」とか「句読点の有無」のような対策ではブロックできません。日本語として成立している文章なので、ぱっと見ただけではスパムだとは思えません。ある程度読んじゃうんですよね。「なんでこんな関係ない話を書いてくるんだ、この人は......?」と思って、「おかしいな......、投稿先を間違えたのかな?」と思い、人物名を見ると「グッチ」、URL欄を見ると「チープグッチ・ドットコム」みたいなスパムURLになっていたり......。スパム業者、爆発しろ!(-_-メ)もっと巧妙なのは、「ブログのコメント投稿欄」のように、「コメント欄の上部に、そこそこ長い文章が掲載されているページ」の場合、その本文内から適当に抜粋した文字列をそのまま使って投稿してくるんですよ。その場合、一見すると脈絡があるように感じてしまいます。これって本文のコピペじゃない?」と気付くわけですが。キーワードブラックリスト最近は、(少なくとも私が管理している範囲では)どうもブランド名を含んだスパム投稿が多いので、いっそ国内外のあらゆるブランド名を列挙したデータを作って、それらを含む投稿を一括ブロックしようかとも思ったりしています......。(^_^;;;私のサイトの場合だと、ブランド名をコメントに含めるような話題が出ることはまずありませんし。(^_^;;;スパムサイトは、SEO効果を気にしているので、URL内にもブランド名がそのまま使われていることも多々あります。その点でもブロックしやすいかも知れません。URLに使われているドメイン名すらランダム文字列にしか見えないスパムサイトもありますが......。それに、多いとはいえ全部ではありませんしね......。日本語表記と英語表記だけならともかく、ロシア語や中国語でのブランド名は分かりませんし。(調べてリストアップするのも面倒ですし。)URL欄・NAME欄に何か書いたらアウトそこで、新たな対策として最近は、ダミーの「URL入力欄」・ダミーの「NAME入力欄」を用意しておいて、そこに何かを入力された投稿は、問答無用で却下......という対策を取っています。ダミーの入力欄は、CSSを使って、ブラウザ上では見えないようにしてあるので、CSSを無効にしているような特殊な環境でない限り、ダミーの入力欄は見えません。スパム業者は、1ページ1ページ人力で入力欄をチェックしたりなど当然していません。クローラーに巡回させて、入力欄のあるページを片っ端から収集しているのでしょう。HTML内に入力欄があれば、それらの中に非表示になっているダミー入力欄があるとは考えないはずです。今の入力フォームの項目名は、そのものずばりシンプルすぎるんですよね。「comment」が、コメント本文の入力欄......のように。それを以下のようにします。「name」が、ダミーの入力欄(何か入力したら問答無用で拒否)「url」も、ダミーの入力欄(何か入力したら問答無用で拒否)「comment」も、ダミーの入力欄(何か入力したら問答無用で拒否)......のような。(^_^;;;正規の入力欄に使われている項目名は、動的に生成するようにして、毎回異なるとさらに良いかも知れません。HTML内に存在しない項目に何か書いたらアウトスパム投稿では、そもそも投稿ページ(HTML)側に「どのような入力欄があるか」すらチェックしておらず、直接CGIに(name欄やurl欄があることを前提にした)データを送っている場合もありそうです。その場合、送られてくる投稿データ内には、「HTML側には用意していない名称の項目」も含まれている可能性が高いでしょう。そこもチェックするようにして、「HTML側で用意していない入力欄」に対するデータがあったら拒否、としても良いかもしれません。(使っているCGIが、様々なページから共通に利用されている汎用なものだったらちょっと面倒ですが。)CAPTCHAまあでも、スパム対策で強いのは、たぶん「CAPTCHA」(キャプチャ)ですよね。CAPTCHAというのは、自動解析にしにくい「歪んだ文字列」が表示される画像を読んで、そこに描かれている文字が何なのかの入力を求めることで、「入力者がコンピュータではない」ことを確認する仕組みです。大手企業が提供するサービスでの、アカウント開設画面などでよく使われています。人間の側にも多少の面倒を強いることになりますが。これを使えたら、スパム投稿もほぼ防げるんでしょうねえ......。著者紹介にしし(西村文宏)にししでございます。本書いたり記事書いたりしてます。著書5冊発売中です(Web製作系4冊+小説1冊)。本の最新刊は2011年3月に発売されたライトノベルでございますよ。Aboutでウェブ作成系の記事を連載しています。2001年からの累計記事数は400本を超えています。下記の電子書籍を書きました。Unlimitedにも対応。(紙の本)5冊の著書があります。➡著書一覧と詳細これまでに、下記の書籍を上梓致しました。逃走少女と契約しました。プロ顔負けのホームページ作成術2005年10月12日成美堂出版刊ご興味のある本がありましたら、ぜひ読んでみて下さい!にししのお勧め■ハクメイとミコチ▲夢のある独特の世界観と雰囲気がとても魅力的な物語です。■メイドインアビス▲好奇心旺盛な少女とロボット少年が大洞穴の底を目指して突き下る物語。冒険的な夢ある世界でキャラクターも可愛いのに、容赦ないシリアス展開で目が離せません。半分くらい溶け込んでいる妖怪の日常ほのぼの話。黒菜(主人公の猫娘)の天真爛漫ぶりが良いです。■乙嫁語り▲さらっと読み流したら申し訳ないくらい細かーいところまで描き込まれていて感心してしまう19世紀中央アジアが舞台の物語。マンガなので絵と文字だけなのに、なぜか音も聞こえてくる気がします。■3月のライオン▲中学生棋士マンガ。主人公はもちろん、周囲の人々の一所懸命さと、将棋界の背景がすごくおもしろいです。将棋を知らなくても間違いなく楽しめますよ!■アルテ▲16世紀フィレンツェ画家お嬢マンガ。職業画家になりたい(没落しそうな貴族の?)お嬢様アルテが家を飛び出し、偏屈画家青年の徒弟になって頑張る話。■空想科学X▲シュールなギャグが最高におもしろい科学は関係ないマンガ。毎話毎話笑えるんだけども、笑いの多くがシュールというのがすごく特徴的。盛大に(私から)惜しまれつつ5巻完結。■この美術部には問題がある!▲高校美術部まんが。かわいおもしろいです。■もやしもん▲菌が見える少年が主人公の酒造り農大マンガ。濃いキャラクターばかりで、おもしろいです。細いので1行をピンポイントに示せる上、鉛筆で文字も書ける愛用文房具です。■FRINGE(フリンジ)▲アメリカのSFサスペンスドラマ。FBI捜査官がフリンジサイエンス(非主流科学)科学者と共に説明不能な事件を捜査する話。