1

登録フォームにクールキャプチャを使用しています。これは、コード内で使用している Captcha 生成の画像コードです。

<img src="captcha.php" id="captcha" />

誰でも直接「captcha.php」ページにアクセスして画像を閲覧できます。だから私の質問は、ブラウザで Captcha.php の直接アクセスまたは直接表示を無効にする方法はありますか? Captcha.php は、ブラウザによる直接表示ではなく、img ソース内の表示にのみ使用できるようにしたいだけです。とにかくphpまたはhtaccessファイルで行うことはありますか?

ありがとう

4

5 に答える 5

1

これをブロックする効果的な方法はありません。URL を画像でレンダリングするソリューションさえあるからです。この場合、キャプチャをブロックするために労力を費やしたとしても、レンダリングされた URL の画像 (たとえば、Linux でバッファ xvfb を保存する) を使用して、この画像を X、Y 座標で切り取るキャプチャを取得するのに十分です。ところで...リファラーの検証やajaxリクエストなどの別のソリューションは、https: //addons.mozilla.org/en-US/firefox/addon/hackbar/などのツールでバイパスできます

于 2012-10-07T17:11:54.227 に答える
1

.htaccessもちろん、画像のホットリンクを防ぐのと同じ方法で 使用できます

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$   
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourdomain.com [NC]
RewriteRule ^hellothere/captcha\.php$ - [NC,F,L]
于 2012-10-07T17:12:15.223 に答える
0

私が理解している限り、答えはノーです。少なくとも安全な方法ではありません。srcサーバーの場合、ページがタグのものであるためにページを呼び出すブラウザと、ブラウザ<img>に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で、シークレットが今分か直前のシークレットかを確認します($now = time(); $_REQUEST["secret"] == strftime("%Y%m%d%H%M", $now) || $_REQUEST["secret"] == strftime("%Y%m%d%H%M", $now - 60)
  • form.phpのリクエストごとに新しいランダムシークレットを生成し、captcha.phpで確認します(シークレットが生成されたら保存し、使用したら削除するにはmemcached(または同様のもの)が必要です)。
  • form.phpを実行するときは、を設定$SESSION["captcha_ok"] = 1;し、captcha.phpで実行します。if (!$SESSION["captcha_ok"]) {show_error();} else {$SESSION["captcha_ok"]=0; etc....

しかし、繰り返しになりますが、これらの方法のいずれも、フォームなしでキャプチャを表示することを本当に望んでいる人々を実際に妨げることはありません。

于 2012-10-08T12:42:07.840 に答える
0

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...');
于 2012-10-07T17:26:58.837 に答える