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

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

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

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

PHP

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

JavaScript

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

1回答

1620閲覧

reCAPTCHAのサイトキーの役割について

退会済みユーザー

退会済みユーザー

総合スコア0

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

PHP

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

JavaScript

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

1クリップ

投稿2019/09/02 11:50

「reCAPTCHA」のv3について分からない部分があり、お聞きしたいです。
お聞きしたい部分はHTML部分に貼り付ける「サイトキー」が何故必要なのか、といった点です。
reCAPTCHAでは、submitされた場合などに、javascript側でトークンが発行され、トークンをサーバーサイドへと渡します。
そして、サーバーサイド側からトークンと共にシークレットキーをreCAPTCHAの検証APIへと送り、そこでbotか人間かの判断が行われレスポンスが返されるといった流れかと思います。
ここの一連の流れで疑問なのですが、サイトキーはなんの役割を担っているのか、といった部分です。
サイトキーはreCAPTHCAの検証APIへ送られるという訳ではないのなら、何故HTMLに組み込む必要があるのでしょうか?

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

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

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

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

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

guest

回答1

0

サイトキーはreCAPTHCAの検証APIへ送られるという訳ではないのなら

送っていますので、この前提がおかしいです。

投稿2019/09/02 12:26

maisumakun

総合スコア145183

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

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

退会済みユーザー

退会済みユーザー

2019/09/02 12:29 編集

サイトキーもシークレットキーやトークンとともに、サーバーサイドからreCAPTCHAの検証APIへ送られるということでしょうか?
maisumakun

2019/09/02 12:31

それ以前の、JavaScriptのロード時点でキーをチェックされますので、キーと対応しないアドレスに貼った場合はそもそも動きません。
退会済みユーザー

退会済みユーザー

2019/09/02 23:37

ご返信ありがとうございます。 少し疑問に思ったのですが、そもそもトークンとシークレットキーをreCAPTCHAの検証apiへ送り人間かbotの判断をするならば、何故サイトキーが必要なのでしょうか? サイトキーがなくとも、トークンとシークレットキーのみがあれば、良いのではないでしょうか?
退会済みユーザー

退会済みユーザー

2019/09/02 23:38

>JavaScriptのロード時点でキーをチェック こちらの部分なのですが、いまいちチェック意味が分からないです...
m.ts10806

2019/09/03 00:22

ドキュメントに書いてありますね https://developers.google.com/recaptcha/docs/v3 1.Load the JavaScript api with your sitekey 2.Call grecaptcha.execute on an action or when the page loads 3.Send the token to your backend with the request to verify
m.ts10806

2019/09/03 00:23 編集

「他のドメイン・サイトで使わせないための認証」のようなもので、ログインユーザーIDと同じと思って良いのではと。
退会済みユーザー

退会済みユーザー

2019/09/03 01:24 編集

>「他のドメイン・サイトで使わせないための認証」 ここですが、他のサイトで使わせない為の設定が何故必要なのかなと疑問なんですよね... ユーザーもサイトキーの発行をせず、手軽にreCAPTCHAを導入し、検証の為のトークンをreCAPTCHA検証apiへ送り検証すれば事足りるのではないかなと思うんですよね
m.ts10806

2019/09/03 01:29

ではそういう仕様でAPI作って配布してみるといいです。 APIサーバーが不正アクセス大量に受けてすぐダウンしますよ。
退会済みユーザー

退会済みユーザー

2019/09/03 01:34

不正アクセス防止などの対策だったということなんですね
m.ts10806

2019/09/03 01:36

ですから「登録したユーザー以外使わせない」ログインユーザと同等の意味です。 サイトキーと設置サイトのURLで一対。ログインIDとパスワードで一対。概念としては同じです。
退会済みユーザー

退会済みユーザー

2019/09/03 01:42 編集

何故、googleなどのAPIを使う場合に認証が必要かが分かったような気がします。 よくあるformでのリクエストはバリデーションなどで、不正な値を弾いていますけど、APIサーバーの場合はそういう訳にいかないですよね
m.ts10806

2019/09/03 01:48

API側も内部ではバリデーションしていると思いますよ。だからロード時にキーを送るわけで。
退会済みユーザー

退会済みユーザー

2019/09/03 01:51

あ、やっぱそうですよね。 でもそうなると、サイトキー(ユーザーid)がなくても、どんなリクエスト(不正な値)が送られても大丈夫ではないんですか?
m.ts10806

2019/09/03 01:52

何が聞きたいのか分かりませんがmaisumakunさんの回答とコメントで私は理解できました。
退会済みユーザー

退会済みユーザー

2019/09/03 01:57

あ、いやつまり、API側でバリデーションチェックを行っているなら、サイトキーによる「「他のドメイン・サイトで使わせないための認証」が必要ないのではないかと思いまして。。
m.ts10806

2019/09/03 02:05 編集

>JavaScriptのロード時点でキーをチェックされますので、キーと対応しないアドレスに貼った場合はそもそも動きません。 サイトキーによる認証とreCAPTHCAのbotのチェックは別です。 同時にしてしまうと不正アクセスを受け入れる必要がありますので。
退会済みユーザー

退会済みユーザー

2019/09/03 02:09

あーいえ、そもそも、サイトキーによる認証はいらないのではないか、といった疑問です。 API側でバリデーションを行っていれば、サイトキーによる、「他のドメイン・サイトで使わせないための認証」が必要ないと思った為です。
m.ts10806

2019/09/03 02:17

何に納得いってないのか分かりませんが、ロード時のリクエストとreCAPTHCAのリクエストは別です。 それとも「APIの仕様です」だけで納得されますか?(ケンカ売ってるわけではないです。そこ納得しようもしないも自由ですが、サイトキー指定しないと使えない事実は変わらないので、何をこだわっているのか分かりません。)
退会済みユーザー

退会済みユーザー

2019/09/03 02:21

もちろんサイトキーを使用しないと使えない事実に変わりはないのですが、必要な理由、何故必要なのか、といった部分に納得がいっていないといった感じですね
m.ts10806

2019/09/03 02:24

納得がいかないと使えないのでしたら使わなくて良いと思います。 これだけ言っても納得いかないというのでしたら開発者の説明を受けるしかないので API提供元であるGoogleに直接問い合わせてください。 当事者でもないので作りやドキュメントから想像することはできても実際の作りや理由まで完全に説明できるのは作った人しかいません。 ただ、ドキュメントを深く読み込まずに突撃しても門前払い喰らうだけなのでご注意を。
退会済みユーザー

退会済みユーザー

2019/09/03 03:04

実際の作りとかそういうことではなく、サイトキーによる「チェック」が何故必要なのかといった部分ですね。 もちろん「ロード時のリクエストとreCAPTHCAのリクエストは別です」ここについては理解しています。
m.ts10806

2019/09/03 03:07

>実際の作りとかそういうことではなく、サイトキーによる「チェック」が何故必要なのかといった部分ですね。 それ誰が聞いても作りの話ですよ。仕様部分です。
退会済みユーザー

退会済みユーザー

2019/09/03 03:11

仕様というか、例えば、シークレットキーとトークンをreCAPTCHA検証apiへ送るのは、botか人間かの判定を行う為だと分かりますが、では、サイトキーを送ることで何を検証しているのか、といった部分が分からないと言っています。
m.ts10806

2019/09/03 03:19 編集

それはここのコメントの経緯から「ログインIDとパスワードを送ることで何を検証しているか分からない」というのとイコールと認識されてますか? いずれにしても仕様です。利用者観点でも開発者観点でも「実際の挙動やドキュメントなどから考えられる理由」は既に出ています。 それ以上のものが欲しければ自分で同等のものを自分が思う仕様で作って運用してみるか、提供元に聞くしかありません。 おそらく今回出ている内容で納得できないような人は、 Webで言えば身近な例、「なぜ出力時にHTMLエスケープが必要なのか」もどんなに素晴らしい講義を聞いたとしても攻撃されてみないとどこまでの必要度合いが実感できない人なので、フォローできる人はいません。(今回の私のコメントが素晴らしい講義に当たるわけではないですが、私の理解と概念的に近いもので例えて伝えたのでそれ以上はないです)
退会済みユーザー

退会済みユーザー

2019/09/03 03:24

ちょっと話がかみ合っていないように思えます。 そもそも、mtsさんから「サイトキーを送り何故チェックする必要があるのか」に関しては、「他のドメイン・サイトで使わせないための認証」であるといったような答えがありましたが、それについての疑問点もお伝えしましたよね? その上で、何故必要なのかと聞いているのです
m.ts10806

2019/09/03 03:29 編集

何度読み返しても、「他のドメイン・サイトで使わせないため」以上に必要な理由は出てこないですけど。どこをどう深堀したいのか分かりません。 ログイン認証するのも「認証されていないユーザーにサイトを利用させないため」ですし、それに対して「なぜ必要なのか」と聞かれても。 かみ合ってないのは「絶対に必要ない」と頭から否定して入ってるからだと思います。逆に「どうなったら必要だろう」「こうなったら必要なのでは」という頭に切り替えてください。 それができないなら自分でAPI作って提供して運営してみる以外にありません。
退会済みユーザー

退会済みユーザー

2019/09/03 03:40 編集

いえ、やはり掛け違いがあったように思えます 認証されていないユーザーに利用させないという答えに対して、その理由を尋ねた所、「APIサーバーが不正アクセス大量に受けてすぐダウンしますよ。」との答えがあった為、それはAPI側でもバリデーションをかけているので、サイトキーでチェックする必要はないのではないのか?といった意味での「必要ないのではないか」といった意味です
m.ts10806

2019/09/03 03:45 編集

APIの配信先、およびサイトキーの送信先もGoogleのサーバーです。 サイトキーが発行されているのがGoogleのサーバー ですのでそのチェックもサーバーに送らないとできません。 reCAPTHCAのbotチェック機能だけを「API」と認識されているので会話が成り立たないのです。
退会済みユーザー

退会済みユーザー

2019/09/03 03:48

> サイトキーによる「チェック」が何故必要なのか API 作成者がそう決めたから以外になにかある? 11:24 の返信にあるようにご自分でお問い合わせください
退会済みユーザー

退会済みユーザー

2019/09/03 03:56 編集

>ですのでそのチェックもサーバーに送らないとできません。 サイトキーがなくとも、不正なリクエストのバリデーションチェックはgoogleサーバーで可能なのではないでしょうか? そうなると、サイトキーの必要性が、ちょっと分からないですね...
m.ts10806

2019/09/03 04:03

同じこというのはこれで最後にしておきますね。 「登録したユーザー以外使わせない」ログインユーザと同等の意味です。 サイトキーと設置サイトのURLで一対。ログインIDとパスワードで一対。概念としては同じです。 あなたは「パスワードの必要性が分からない」と同じことを言っています。 あなたは銀行のキャッシュカードだけ持ってればどこでも誰でも引き落とせる仕組みを提唱しています。 サイトキーと設置サイトURLをロード時にサーバーに送ってチェックしている。そこで認証が通らないと機能が使えないようになっている という話をここにいる人はずっとしているんですが、どこでどう受け取ったらそのような返しになるんでしょうか。 これも2回目。 かみ合ってないのは「絶対に必要ない」と頭から否定して入ってるからだと思います。逆に「どうなったら必要だろう」「こうなったら必要なのでは」という頭に切り替えてください。 これ以上は知りませんし誰も答えられないでしょう。 Googleに問い合わせてください。
退会済みユーザー

退会済みユーザー

2019/09/03 04:18 編集

パスワード設定するにしても目的もなしにパスワードは設定しません。 つまり、登録をしていない誰でもapiが使用できたとしても、不正アクセスに対しては、apiサーバー側でバリデーションチェックをしているので、サイトキーによるチェックを行う必要がないのではないか?ということを聞いています
maisumakun

2019/09/03 04:21

セキュリティは必要に応じて何重にもかけることが可能です。「APIレベルでのチェック」以外に「JavaScriptロード時点でのチェック」を加えることでさらに強固にする、という考え方はしないのでしょうか。
m.ts10806

2019/09/03 04:23

かみ合ってないのは「絶対に必要ない」と頭から否定して入ってるからだと思います。逆に「どうなったら必要だろう」「こうなったら必要なのでは」という頭に切り替えてください。
m.ts10806

2019/09/03 04:27 編集

セブンペイの失敗がいい例ですね。 https://diamond.jp/articles/-/210786 reCAPTCHAの導入自体も「パスワードとログインIDだけだと不正アクセスや総当たりで破られる可能性があるからちゃんと人間が手で操作しているのを担保しよう」が目的ですし。 その前に同じアクセス元から何度も失敗したらアクセス不可とするようにすることもありますし(むしろ必須) 「こうしとけば問題ない」と思ってると簡単にセキュリティは突破されます。
m.ts10806

2019/09/03 04:29 編集

だから、自分が攻撃の対象となってみる以外、必要性や理由、何が必要かを実感する手段はない、 でなきゃGoogleに直接問い合わせて  と何度も言っています。 不親切だとか、全く知らないとかではないのです。「必要ない」とハナから思ってる人だから受け入れられてないだけなのです。
退会済みユーザー

退会済みユーザー

2019/09/03 04:30 編集

@maisumakun そのような理由だったのですね。そのように言われれば納得はできるのですが、プログラミングも含め経験が浅い為、そのようなことが思いつかなかったといった感じでした
m.ts10806

2019/09/03 04:33

maisumakunさんのコメントを良く読んでください「考え方はしないのでしょうか」というss_111さんに対する指摘に過ぎません。「こういう理由だ」と述べているわけではなく、あくまで実情と経験則によるものです。 (maisumakunさん、Google関係者でしたらすみません)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問