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

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

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

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

5回答

1192閲覧

フォームからのスパム対策で最も効果的な方法とは

teratail_siw

総合スコア19

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2017/09/07 02:23

とあるページに設置されたメールフォームに、毎日のようにスパムメールが送信されてきます。
フォームの構成は仮に下記とします。

・メールアドレス入力欄(入力必須)
・メッセージ入力欄
・プライバシーポリシー同意チェックボックス(入力必須)

スパムメールをなくすための方法として、下記のうち最も効果があると思われるのはどれでしょうか。
今回はHTML、JavaScriptで対応できる方法のみとします。

  1. formタグをHTMLに記述しない

チェックボックスにチェックを入れるとformタグが付与されるようにする

  1. 送信ボタン(submitタグ)をHTMLに記述しない

チェックボックスにチェックを入れると送信ボタンのHTMLが付与されるようにする

  1. 送信ボタン(submitタグ)をデフォルトでdisabledにする

チェックボックスにチェックを入れると送信ボタンのdisabledが解除されるようにする

スパムロボットはJavaScriptを読んでいないと仮定すると、1、2に関してはチェックを入れなくてもJavaScriptでHTMLを付与すれば効果は変わらないような気がしますがどうでしょうか。

これら以外にも効果的な方法があればぜひ伺いたいです。
画像認証など、ユーザーの手間を増やす方法は除外します。

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

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

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

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

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

guest

回答5

0

googleのrecaptchaが手軽で良いのではないでしょうか?
押すだけなので離脱も避けられます。

https://syncer.jp/how-to-introduction-recaptcha

投稿2017/09/07 02:28

tesopgmh

総合スコア146

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

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

teratail_siw

2017/09/07 02:37

早速のご回答ありがとうございます。 有効な方法だとは思いますが、今回は(ごく僅かであっても)ユーザーの手間を増やす方法は除外させてください。
think49

2017/09/07 09:50 編集

横からですが、念のため、要件を確認させて下さい。 > 今回は(ごく僅かであっても)ユーザーの手間を増やす方法は除外させてください。 質問文にある3つの対策は全てチェックボックスにチェックを入れることでform要素が活性化されるものです。 そして、tesopgmhさんが提案されているreCAPTCHAもチェックボックスにチェックを入れることを求める仕組みです。 私には両者の手間は変わらないように思えるのですが…。 また、質問文にあるチェックボックスにチェックを入れる行為はごく僅かながらユーザの手間を増やしている事になるのてはないでしょうか。
teratail_siw

2017/09/07 10:09

質問欄で「チェックボックスにチェックを入れると」と書いたのが誤解を生む要因でした。 申し訳ありません。 正しくは「プライバシーポリシー同意のチェックボックスにチェックを入れると」です。 formを活性化させるためだけに別途チェックボックスを設置することはNGですが、あらかじめ設置されたプライバシーポリシー同意のチェックボックスをform活性化に利用すれば手間が増えることにはならないと考えました。 ご回答ありがとうございました。
guest

0

今回はHTML、JavaScriptで対応できる方法のみとします。

状況にもよりますが、サーバサイドを変えない条件では気休めにしかならない可能性もそれなりにあります。

たとえば、CSRFトークンもないようなフォームだと、特定のURLにPOSTするだけでメール配信できる、ということになります。HTMLやJavaScriptで工夫しても「POSTするURLをわかりにくくする」以上の効果はないので、それがわかってしまえば一巻の終わりです。

投稿2017/09/07 04:33

maisumakun

総合スコア145123

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

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

teratail_siw

2017/09/07 09:59

>気休めにしかならない 確かにそうですね。 JavaScriptだけの対策では限界があることを確認できただけでも大変参考になりました。 貴重なアドバイスありがとうございました。
guest

0

ベストアンサー

敵(スパムロボット)の正体が分かっていないので回答としては「やってみないと分からない」と思います
ご質問にあった「JavaScriptを読んでいないと仮定する」というのがそもそも間違っている場合はjavascriptを使った対策をしても意味を成しません。ヘッドレスブラウザーを使ってプログラミングすればJavascriptを処理してスパムメールを送ることは可能ですから。

つまり、ご質問の対策をやってみて、スパムがなくなるようであれば
敵(スパムロボット)はJavascriptを処理できないロボットなので効果があるということになります。

投稿2017/09/07 03:09

tesopgmh

総合スコア146

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

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

teratail_siw

2017/09/07 10:01

JavaScriptでの対策は、スパムロボットがJavaScriptを読んでいない場合に限る。 ということですね。大変参考になりました。 貴重なアドバイスありがとうございました。
guest

0

メールフォームに、毎日のようにスパムメールが送信されてきます

フォームから送られてきているとは限らないのでは?
もしformのactionにmailtoを入れているのであれば
メールアドレスをネットに晒しているわけですから
スパムは避けられないでしょう

考え方を変えれば、gmailなどスパムをフィルタリングしてくれる
メールサービスを通して受け取るとかが妥当じゃないでしょうか

投稿2017/09/07 02:30

yambejp

総合スコア114585

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

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

teratail_siw

2017/09/07 02:41

早速のご回答ありがとうございます。 メールフォームから送信される自動返信メールを介してスパムが送られてきます。 ロボットが自動的にフォームを送信しているようです。 このようなスパムを排除する方法を模索しています。 メールサービスのフィルタリングも効果的な方法ではありますが、 今回はメールサービスのフィルタリングは対処方法から除外させてください。
yambejp

2017/09/07 02:52

メール自体を送っているのはサーバーサイドのプログラムということでしょうか? 状況がよくわかりません
teratail_siw

2017/09/07 03:00

説明不足で申し訳ありません。 メールを送信しているのはサーバサイドのプログラムです。 問い合わせフォームプログラムをサーバに設置していまして、そのプログラムを介してメールが送られてきます。 通常は人がフォーム内容を入力して送信ボタンを押すのですが、それと同様の行為をロボットが大量に行なっているようなイメージです。
yambejp

2017/09/07 03:10 編集

サーバーサイドのプログラム処理ならいくつかやりようはありそうですね たとえば ・ロボットはリファラをクリアしている可能性が高いのでリファラをチェックする ・REMOTE_ADDRなどユーザー情報をメールに付加するようにしてスパムについてはipアドレスでブラックリストを作成する (もしくは意図的にREMOTE_ADDR情報が削除されているものを排除する) ・UAをチェックして値がない場合は除外する (UAでホワイトリストを作るのはメンテが大変なのであるかないかくらいのチェックしかきびしい?)
teratail_siw

2017/09/07 03:13

サーバサイドでの処理のご提案ありがとうございます。 せっかくご提案をいただいたのに申し訳ございませんが、質問欄にも記載させていただいた通り今回はHTML、JavaScriptで対応できる方法のみとさせてください。(サーバサイドのプログラムを変更できない事情がございます)
yambejp

2017/09/07 03:18

> 今回はHTML、JavaScriptで対応できる方法のみ そういえばそういう条件でしたね 例えばこんなのはどうですか? 読み込み時、フォームにactionを設定しない。 読み込みの数秒後setTimeoutなどactionを設定してやる ロボットは基本的に読み込み時のactionを利用するでしょうから・・・ ただ、ユーザーの利便性を考えると、javascriptを前提としたシステムは 汎用的とは言えないので微妙ですね
teratail_siw

2017/09/07 10:04

>フォームにactionを設定しない 試してみます。 確かにおっしゃる通り、JavaScriptが必須になってしまうとユーザビリティにかけますね。 その辺りも踏まえて対応方法を検討させていただきます。
guest

0

スパムが顧客に迷惑を書けるものでなければ、単純にスパムとして扱えるシステムを利用するのが良い気がします。(スパムフィルタを通す等)

投稿を制限するのであれば、投稿を観察する必要があります。
・ロボットによるものである
・人が手作業でコピペ
・大量に届いて業務に支障がある
・少量だがウィルス等が添付されていて危ない
等々。

効いてくる対応策も全然別物になるので、まずはそこの整理かと思います。

あまり状況に関係なく効果的なのは
・ページを生成してから X 秒経たないと投稿を受け付けない
・特定の IP アドレスからの1日あたりの投稿数を制限
・特定文字列をフィルタ
・投稿ボタンや投稿確認ボタンをランダムに記載
あたりだと思いますが、ユーザに迷惑をかける可能性も有るので、慎重に選択する必要があります。

スパムってホントに面倒くさいですよね^^;

投稿2017/09/07 02:47

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

teratail_siw

2017/09/07 02:56

早速のご回答ありがとうございます。 スパムメールの内容は ・ロボットによるもの ・短時間に膨大な量のメッセージが届く というものです。 >特定の IP アドレスからの1日あたりの投稿数を制限 >特定文字列をフィルタ IPアドレス、文字列が毎回変わるためこちらの方法は断念します。 >ページを生成してから X 秒経たないと投稿を受け付けない 質問欄であげさせていただいた1~3の方法より効果は高いのでしょうか。 >投稿ボタンや投稿確認ボタンをランダムに記載 申し訳ありません。私の理解力不足で「ランダムに記載する」というのがどのようなことかわかりません。 よろしければご解説いただけないでしょうか。
退会済みユーザー

退会済みユーザー

2017/09/07 03:11

正直何を見て投稿しているかわからないので、効果は測定してみないと分かりません。 > 質問欄であげさせていただいた1~3の方法より効果は高いのでしょうか。 機械投稿であれば、画面上のボタンが押せようが押せまいがあんまり関係ありません。ソースを確認して、curl 等で直接 POST してくるので、サーバ側でフィルタする必要がありますが、そのフィルタ根拠として、「人らしからぬ動き」を検出し、排除するってことなので、ハマればかなりの効果が見込めます。 > 投稿ボタンや投稿確認ボタンをランダムに記載 view を切り替えて、投稿処理を複数システムにします。 これは、スパム側がエラー処理をどのように行っているかによりますが、いくつかエラーを出せば、諦めてくれるようなシステムだと、それなりに効果ありです。 あと、思いつきですが、CSRF token の名称をランダムにするのも良いかもしれないです。
teratail_siw

2017/09/07 10:02

色々と実例を挙げていただきましてありがとうございます。 参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問