javascript-capthca用の読み取り不可能なPHPページを作成します
登録フォームにcool-captchaを使用しています。 これは、コード内で使用しているキャプチャ生成の画像コードです:
<img src="captcha.php" id="captcha" />
誰でも直接「captcha.php」ページにアクセスして画像を表示できます。だから私の質問は、ブラウザでのCaptcha.phpの直接アクセスまたは直接表示を無効にする方法はありますか? Captcha.phpは、ブラウザーによる直接表示ではなく、imgソース内の表示にのみ使用できるようにしたいだけです。とにかくphpまたはhtaccessファイルで行うことはありますか?
ありがとう
答え :
解決策:
もちろん、画像のホットリンクを防ぐのと同じ方法で .htaccess
を使用できます
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourdomain.com [NC]
RewriteRule ^hellothere/captcha\.php$ - [NC,F,L]
答え :
解決策:
画像にURLをレンダリングする解決策もあるため、これをブロックする効果的な方法はありません。この場合、キャプチャをブロックするために労力を費やしたとしても、URLのレンダリングされた画像(たとえば、Linuxでバッファxvfbを保存する)を使用すると、キャプチャがこの画像をX、Y座標で切り取るのに十分です。ちなみに...リファラーの検証やajaxリクエストなどの別のソリューションは、 https://addons.mozilla.org/en-US/firefox/addon/hackbar/
>答え :
解決策:
PHPスクリプトへの直接アクセスを停止するには、スクリプトの先頭にこの行を追加します
if (!defined('BASEPATH')) exit('No direct script access allowed');
AJAXリクエストを許可するには:
if (!defined('BASEPATH') &&
strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest')
exit('No direct acess allowed...');
答え :
解決策:
私が理解している限り、答えはノーです。少なくとも安全な方法ではありません。サーバーの場合、ページを呼び出すブラウザは <img>
タグのsrc
であるため、または単に誰かであるため、ほとんど違いはありません。ブラウザにURLを入力します。
また、どのような問題を回避しようとしているのかもわかりません。誰かがあなたのキャプチャをその周りのページなしで見ることの問題は何ですか(彼らが本当に見たかったのなら...)。
フォームにないものが見にくくするためのアイデアがいくつかあります:
- HTTP_REFERERを確認します。一部のウイルススキャナーとインターネットセキュリティパッケージもHTTP_REFERERヘッダーを強制終了するため、これらのユーザーはキャプチャを表示できなくなります。
- 上部のopcaptcha.phpでURLパラメータを確認します(たとえば、captcha.php?secret = 123456789の場合にのみアクセスを許可します)。あなたのform.phpページであなたは秘密を知っていますが、他の人は(理論的には)知りません。時間の経過とともにシークレットを変更できます:(
$secret = md5($salt . strftime("%Y%m%d%H%M"));
)次に、captcha.phpで、シークレットが今分か直前のシークレットかを確認します({-code -4}
) - form.phpのリクエストごとに新しいランダムシークレットを生成し、captcha.phpで確認します(シークレットが生成されたら保存し、使用したら削除するにはmemcached(または同様のもの)が必要です)。< / li>
- form.phpを実行するときは、
$SESSION["captcha_ok"] = 1;
を設定し、captcha.phpでif (!$SESSION["captcha_ok"]) {show_error();} else {$SESSION["captcha_ok"]=0; etc....
を実行します。
しかし、繰り返しになりますが、これらの方法のいずれも、フォームなしでキャプチャを表示することを本当に望んでいる人々を実際に妨げることはありません。
答え :
解決策:
<html>
<head>
</head>
<body>
<?php
session_start();
$no=rand(0,567890);
$_SESSION['imgno']=$no;
?>
<img src="load.php?sc=<?php echo $no; ?>" width="300px" height="300px" />
</body>
</html>
load.php
<?php
session_start();
header('Content-Type: image/jpeg');
if(isset($_SESSION['imgno']))
{
readfile("student1.jpg");
unset($_SESSION['imgno']);
}
else
{
readfile("thumbs.gif");
}
?>
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。