1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

開発者の環境や技術Advent Calendar 2019

Day 11

Google reCAPTCHA v2 導入時につまったこと

Posted at

概要

Google reCAPTCHA v2 サーバ側処理の実装時に詰まった内容の備忘録

内容

実装する際に当初下記のようにgoogle側に認証のため、
file_gets_contentsを利用して結果を受け取るように実装し、
開発環境では問題なく動作していた。

$response=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".シークレットキー."&response=".レスポンスコード);

ただ、こちらの内容を今度は本番環境にリリースしたとき、何度試しても
reCAPTCHAの認証がエラーが返ってくる現象が発生。

原因

結果としては、「file_gets_contents」が原因で発生。
開発サーバ側では上記は利用できるような設定がされていたが、本番サーバ側では
利用できないように設定されていたため、認証が出来ずに常にエラーに・・・。

PHP: 実行時設定 - Manual
http://php.net/manual/ja/filesystem.configuration.php#ini.allow-url-fopen

今までは普通のこちらの設定がONになっていたため、利用できていたが
まれにOFFになっていることがあるようです。

解決策

単純に「file_gets_contents」を利用せずに「cURL」を利用して実装したところ
問題なく動作可能でした。

$url = "https://www.google.com/recaptcha/api/siteverify?secret=".シークレットキー."&response=".レスポンスコード;

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
$response = curl_exec($ch);
curl_close($ch);

おわりに

PHP側で用意されている関数を利用するから問題ないだろうとろくに調べずに
「いつもどおり」で実装することは危険であることが改めて実感できました・・。

皆様もお気をつけください。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?