秒速でPHPのフォームにreCAPTCHA v3を導入するサンプルコード
PHPで作った問い合わせフォームなどが、迷惑メールやハッキングツールの餌食になってしまい、荒らされてしまう事が多い昨今ですorz
このままじゃいけないと分かっていても、CAPTCHAを導入するのがめんどい・・・。
・・・できれば二行で終わらせたい!
という方のために、コピペ後に二行だけ追加すればreCAPTCHAを導入出来るサンプルコードを用意しましたw
あらかじめ、reCAPTCHAのサイトにアクセスして、サイトキーやシークレットキーを取得する必要があります。そこだけ30秒くらいかかってしまいますが、我慢して下さい。
以下、コピペ用コードです。
※ yoursitekeyとyoursecretkeyには、reCAPTCHAのサイトキーとシークレットキーを記述して下さい。
<?php
// あらかじめ、recaptchaのサイト(https://www.google.com/recaptcha/intro/v3.html)で、サイトキーとシークレットキーを取得しておく。
$recaptcha_site_key = "yoursitekey";
$recaptcha_secret_key = "yoursecretkey";
// recaptchaを表示する<FORM>〜</FORM>内に記述
function recaptcha(){
global $recaptcha_site_key;
echo "<input type='hidden' name='recaptchaResponse' id='recaptchaResponse'><script src='https://www.google.com/recaptcha/api.js?render={$recaptcha_site_key}'></script><script>grecaptcha.ready(function(){grecaptcha.execute('{$recaptcha_site_key}', {action: 'sent'}).then(function(token){document.getElementById('recaptchaResponse').value = token;});});</script>";
}
// フォームが送信された後の処理 例:if(recaptcha_verify()){echo '認証成功';}else{echo '認証エラー';}
function recaptcha_verify(){
global $recaptcha_secret_key;
$post_key = "recaptchaResponse";
if(isset($_POST[$post_key]) && !empty($_POST[$post_key])){
$response = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".$recaptcha_secret_key."&response=".$_POST[$post_key]);
if(json_decode($response)->success){
return true;
}
}
return false;
}
?>
// あらかじめ、recaptchaのサイト(https://www.google.com/recaptcha/intro/v3.html)で、サイトキーとシークレットキーを取得しておく。
$recaptcha_site_key = "yoursitekey";
$recaptcha_secret_key = "yoursecretkey";
// recaptchaを表示する<FORM>〜</FORM>内に記述
function recaptcha(){
global $recaptcha_site_key;
echo "<input type='hidden' name='recaptchaResponse' id='recaptchaResponse'><script src='https://www.google.com/recaptcha/api.js?render={$recaptcha_site_key}'></script><script>grecaptcha.ready(function(){grecaptcha.execute('{$recaptcha_site_key}', {action: 'sent'}).then(function(token){document.getElementById('recaptchaResponse').value = token;});});</script>";
}
// フォームが送信された後の処理 例:if(recaptcha_verify()){echo '認証成功';}else{echo '認証エラー';}
function recaptcha_verify(){
global $recaptcha_secret_key;
$post_key = "recaptchaResponse";
if(isset($_POST[$post_key]) && !empty($_POST[$post_key])){
$response = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".$recaptcha_secret_key."&response=".$_POST[$post_key]);
if(json_decode($response)->success){
return true;
}
}
return false;
}
?>
使い方の例:
前述のコードをコピペした後で、赤字の箇所を、従来のPHPコードに追加すればおk。
<?php
if($_POST){
if(recaptcha_verify()){
echo '送信成功';exit;
}else{
echo '送信失敗';exit;
}
}
?>
<form method='post'>
<input type='text' name='name'>
<?php recaptcha()?>
<input type='submit' value='送信'>
</form>
if($_POST){
if(recaptcha_verify()){
echo '送信成功';exit;
}else{
echo '送信失敗';exit;
}
}
?>
<form method='post'>
<input type='text' name='name'>
<?php recaptcha()?>
<input type='submit' value='送信'>
</form>
・・・秒速とか言いながら、スムーズに事が運んでも1分くらいはかかるかも(ぉぃ)
なお、reCAPTCHA v3は、従来のようなグニャグニャした画像認証は表示されません。
フォームを送信した時のスコアに応じて、承認するか否かを自動判断しているので、
上記のコードを導入したからと言って、フォームの見栄えには全く影響を及ぼしませんのでご注意を。
この記事の最終更新日:2019/10/24
最初に記事を書いた日:2019/10/24
この記事をシェアする
関連記事
- ・外部メールサーバーからメール送信するPHPの関数(簡略版)
- ・TinyMCEにelFinderを搭載した環境で、ファイルを選択できるようにする方法
- ・htaccessのRewriteでGETパラメータを無理やり引き継ぐPHPコード
- ・RewriteRuleが効いているURLで、?以降の文字列を取得する方法
- ・ワードプレスでコメントを完全無効にする方法【コメントスパム対策】
- ・MacでPHP環境のローカルサーバーを立ち上げる方法
- ・画像ファイルをリサイズして、データで返す
リサイズした結果を、ファイルではなく変数に返す。 - ・サーバー内の全てのファイルから、文字列検索
HTTPS化作業に使える - ・PHPで、指定したディレクトリ以下のファイル一覧を再帰的に取得
- ・Googleストリートビューで建物内部が表示されないようにする
Google Maps API v3