質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

1465閲覧

英数字のみのスパムコメントを書き込めないようにするには

mari.rinn

総合スコア296

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/05/14 02:53

編集2016/05/14 02:54

###前提・実現したいこと
いつもお世話になります。最近掲示板に英数字のみのスパムコメントが入るようになってしまい、とりあえず、日本語がコメント内に入っていない場合は、コメントを空にして、コメントが空の場合は書き込みを行わないという以下のコードを処理用のページに書き込んで、サーバーにアップ後自分でテストした時にはちゃんと書き込めないように出来ていたのに、さっき見たらまったくお構いなしに書き込まれていて、乗っ取られてました(;'∀')
これって防御は出来ないものなんでしょうか?仮にIPアドレスとかを調べてそれははじくようにしても効果はないですよね?

よろしくお願いいたします!

###該当のソースコード

if (strlen($comment) == mb_strlen($comment)) { $comment = ""; } else { $comment = $comment; } if($name != "" && $comment != "" && $title != "" && $judge != ""){ $ps = $db->prepare("INSERT INTO bbs (par_id,res_id,name,comment,time,title,url,judge) VALUES (:v_p,1,:v_n,:v_c,:v_t,:v_i,:v_u,:v_j)"); $ps->bindParam(':v_p',$par_id); $ps->bindParam(':v_n',$name); $ps->bindParam(':v_c',$comment); $ps->bindParam(':v_t',$time); $ps->bindParam(':v_i',$title); $ps->bindParam(':v_u',$url); $ps->bindParam(':v_j',$judge); $ps->execute(); }

###補足情報(言語/FW/ツール等のバージョンなど)
レンタルサーバーのPHPは 7 (5.6も可)です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

投稿されてしまったのと同じコメントを試してみて、投稿されるようであれば、記載されたスクリプトの問題ですが、同じコメントでも弾かれてしまうのであれば、別の方法で投稿している可能性があります。投稿時のアドレス等を残すようにして、アクセスログで投稿手段の特定をしたほうが良い気がします。

*乗っ取られるってなんですか?何でもできる状況であれば、手は打てません。。。

投稿2016/05/14 03:04

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mari.rinn

2016/05/14 03:19 編集

>te2jiさん 早速にご回答どうもありがとうございました! あ~~~、全部削除してしまって、URLを変えることでとりあえずの回避をと思いまして、1つフォルダを作って全部そっちに入れてしまったのですが、 もともと、ログも20スレッド分しか残さないようにしてたので今は何も残ってないのですが、 一度戻して、もっかい入れさせて確かめた方が良いですかねえ。 やっぱり別の方法で投稿してるってこともあるんですねえ、投稿手段てアクセスログがあればわかるものなんでしょうか? 自分ではとてもまだ作れるような技術がないので、レンタルのだとだいたいどれでもそういうのがわかるものなんでしょうか? あ、乗っ取られるって表現はおかしかったですね、すみません(-_-;)(-_-;) 今までのログが全部消されて、掲示板がそのスパムで埋め尽くされていたというのが正しいです。大変失礼しました。
退会済みユーザー

退会済みユーザー

2016/05/14 03:36

アクセスログが見れるかどうかはレンタルサーバの仕様次第ですが、通常操作では見れなくても、依頼すれば1日程度のログなら開示してくれるんじゃないですかねぇ。 別の手段というのは、極端な話、DBへアクセスできるのであれば、WebサイトやPHPを通さず、投稿できてしまうという意味です。あまり考えられませんが。。。 アクセスログと投稿ログを比較することで、どのページからPOSTされているのか確認でき、対策も考えられます。 例えば、リファラーのない投稿なのであれば、投稿ページからの投稿以外受け付けなくするとか。 あとは、投稿ボタンをformのsubmitから、Javascriptによるsubmitに変更することでも自動投稿に一定の成果は上がると思います。
mari.rinn

2016/05/14 04:32

>te2jiさん とりあえず元に戻して(瞬くまに秒単位での書き込みが連投されました)まず書いていただいたように自分でコピペして試してみたら投稿されてしまいました。 それで、ネットで調べて、 if (preg_match('/[[:^ascii:]]/',$in['comment'])) {} でやってみましたが、こちらも通ってしまいまして、結局はとりあえずの応急処置として、 if(preg_match("/(http|https):\/\/[-\w\.]+(:\d+)?(\/[^\s]*)?/",$comment)){} でやってみたら投稿できなくなったのでこれでしばらく置いてみたら、スパムもまったく入らなくなりましたので、フォームから投稿されていたということだと思います。 とりあえずは、特にリンクを貼るような必要性のない掲示板なのでこれで使って、その間にじっくり対策を考えたいと思います。 投稿ボタンをjavascriptでというのはなるほど~~~!!と思いました。 その方向でも試してみたいと思います。 いろいろと教えてくださりどうもありがとうございました~! 大変勉強になりました。 また何かありましたらどうぞよろしくお願いいたします!
mari.rinn

2016/05/14 06:57 編集

>te2jiさん たびたび、わざわざ調べてくださりどうもありがとうございます! 早速見せていただきました。簡単そうだし、ちょっとこれからやってみようと思います。 私も調べてみたら、フォーム自体を隠して、javascriptでポップアップで出す みたいなのもあってなるほどと思いました。この際、いろいろ試してみたいと思います。 ほんとにいろいろとどうもありがとうございました~! 追伸です。 教えていただいたページの、jQueryの方ではなくて一番下にあったjavascriptの方でやってみたら無事に出来ました!  ちなみに、insertする時のif文に、 $test == "7hs4sk2" && を付け足してやりました。 javascriptをオフにしてのテストでもうまくいきましたので、とりあえずこれでしばらくやってみようと思います。 ほんとにどうもありがとうございました!
guest

0

スクリプトの確認については既に回答があるので別のアプローチを

そういったスパムは殆どの場合
・海外から
・プログラムで自動的に
実行されます。

このうちどちらかを対処すれば、(悪意のある人間が手動で対応してなければ)殆どの場合防げます。

良くあるアプローチとしては
・投稿に人間の判断が必要になるよう、文字を画像で表示して表示されている内容を記入させる
というのがあります。
検索ワードとしてはPHP captcha

あたりでしょうか。ライブラリがいくつもあるので実装はそれほど難しくありません。

また、実行出来るサーバ環境に制限はありますが、
・.htaccessやOSのファイアウォールで日本以外からの接続を遮断する
という方法もあります。
こちらは実施出来ればスクリプトに到達する前に遮断することが出来るので、安全度は大幅に高まります。
*検索エンジンのクローラーもはじいてしまうので、SEO的には困ったことになります。

投稿2016/05/14 03:21

tanat

総合スコア18713

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mari.rinn

2016/05/14 04:41

>tanatさん ご回答くださりどうもありがとうございます! いろいろと書いていただきほんとに勉強になりました。 とりあえずは、te2jiさんへのお礼に書かせていただきましたが、URLが入ってたら書き込みできないようにというスクリプトで対応出来ましたが、それでしのぎながらちゃんとした処理をしたいと思っています。 画像認証はなるほどですね~!一度試してみます! 検索エンジンはそもそもはじくようにしているので大丈夫です。レンサバの管理人さんにも一度問い合わせてみたいと思います。 いろいろとほんとにどうもありがとうございました! また何かありましたらどうぞよろしくお願いいたします!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問