• 締切済み

呼び出した相手をチェックするには?

webアプリから呼び出されるPHP側で、そのディレクトリ以外の ものから応答しないようにするためには、 if( strpos( $_SERVER[ 'HTTP_REFERER' ], "ここに同じURL" )!==0) exit; だけでよいものなのでしょうか? 実は危険と知りつつ、javascriptから、クエリーを発行したいのです。

noname#84373
noname#84373
  • AJAX
  • 回答数1
  • ありがとう数11

みんなの回答

回答No.1

PHPの関数の話なら、strpos()かstrcmp()のどちらかで良いと思いますが、 ベンチマークなどは取ってないので、どちらが効果的(メモリ消費が少なく早い)かは調べてません。 リファラーチェックそのものはその方法で良いと思いますが、 そのチェックが通ったからといって、本当にそのURLからのアクセスだという保証はありません。 (可能性が高い、というだけです) 一般向けのサイトなら、危険なコードは書かない方が良いでしょう。

noname#84373
質問者

お礼

やっと回答がついた~! ということで、ありがとうございます。 確かに危険なコードは書かないほうがベストですよね~ でも、危険と知りつつも何か良い方法はないかと探しています できない!って言われると、そんなことはないだろう?!と 疑いたがる正確なもので・・・。 先だってこんなのを見つけました http://journal.mycom.co.jp/news/2008/10/07/019/index.html なのでこれを取り入れようと思うのですが、基本的な原理がわかりません! よろしければ、教えていただけないでしょうか? それとも、新たな質問としてアップしなおそうか、迷ってます メタタグにクッキーを仕込んで、スクリプトで呼び出して検証する?みたいなことなのでしょうか?

関連するQ&A

  • 検索エンジンからのリクエストの検索ワードを抽出したいのですが

    タイトルにあるように、検索エンジンからページ(サイト)に来た際、検索キーワードを取り出して検索ワードによって見せるページをかえたいのです。 URLからクエリは取り出したのですが、キーワードのみを取り出すことができなくて悩んでいます・・・ 正規表現を使わずにキーワードを取り出せないでしょうか?(正規表現を使ってはならないといわれておりますので汗) お助けくださるとありがたいです^^ よろしくお願いします! <?php サーバ変数でURLを取得 if($_SERVER['HTTP_REFERER']) { $url = parse_url($_SERVER['HTTP_REFERER']); } else { $url = print'URLの取得に失敗しました'; } $url = $url['query']; クエリが文字化けするのでデコードなどの処理 $rst_url = urldecode($url); $str_url = mb_convert_encoding($rst_url,'EUC-JP','UTF-8'); $str = urldecode($str_url); print $str; ?>

    • ベストアンサー
    • PHP
  • htmlにコードを貼り、リファラーを取得したい

    外部のhtmlページに以下のコードを貼り付け、リファラーとアクセスページを取得しようと思っているのですが、うまくいきません。 ▼ htmlページに貼り付けたコード(外部サーバ) <script type="text/javascript" src="http://example.com/script.php"></script> ▼ script.php の 中身(自サーバ) $access_url= 'http://' . $_SERVER[HTTP_HOST] . $_SERVER[REQUEST_URI]; $referer_url = $_SERVER["HTTP_REFERER"]; [現在の状態] $access_url の中身 = http://自サーバのドメイン/script.php $referer_url の中身 = http://コードを貼り付けたページ 色々と試行錯誤してこの形になったのですが、完全に行き詰ってしまいました。 方向性だけでも良いので、どなたかご教授いただけませんでしょうか。 よろしくお願いいたしますm( _ _ )m

    • ベストアンサー
    • PHP
  • header Locationに関するエラー

    こんにちわ。質問があります。 以下のコードに問題はありますか? "http://xxx.xxx.xxx.html"(仮名)というURLからアクセスした場合は リンク元を表示し、その他からのアクセスの場合は、google.co.jpに飛ぶというプログラムです。 header:Locationの使い方がおかしいらしく、エラーとなってしまいます。 どこに問題がありますでしょうか?ご教示いただけますと大変助かります。 どうぞよろしくお願い申し上げます。 ------------------------------------------------------------- <?php $referer=$_SERVER['HTTP_REFERER']; echo 'referer = '; echo $referer; echo '<br>'; if($referer == "http://xxx.xxx.xxx.html") { echo 'from '; echo $referer; } else { $url="http://www.google.co.jp/"; header("Location: $url"); exit; } ?>

    • ベストアンサー
    • PHP
  • Google Analytics 携帯版のPHPトラッキングが上手く出

    Google Analytics 携帯版のPHPトラッキングが上手く出来ない。 皆様初めまして。 先日までGoogleの方で発行がストップされていた携帯版のトラッキングコードが発行出来るようになっていましたので、設置してみました。 すると、 </body>タグの直前に入れるコードの末尾についている「';?>」がページ上に表示されてしまっているのを発見いたしました。 恐らく、集計もとれていないものと思われます。 これは設置の方法が悪いのでしょうか? それとも、どこかにコードのバグがそもそもあるのでしょうか? 今回挿入したコードは、それぞれ以下の通りです。 ※アカウントID部分や、サイトのルートURLに関しては「*」にて伏せさせていただいております。 ※head内に挿入するコード <?php // Copyright 2009 Google Inc. All Rights Reserved. $GA_ACCOUNT = "MO-***-*"; $GA_PIXEL = "/ga.php"; function googleAnalyticsGetImageUrl() { global $GA_ACCOUNT, $GA_PIXEL; $url = "http://***.jp/"; $url .= $GA_PIXEL . "?"; $url .= "utmac=" . $GA_ACCOUNT; $url .= "&utmn=" . rand(0, 0x7fffffff); $referer = $_SERVER["HTTP_REFERER"]; $query = $_SERVER["QUERY_STRING"]; $path = $_SERVER["REQUEST_URI"]; if (empty($referer)) { $referer = "-"; } $url .= "&utmr=" . urlencode($referer); if (!empty($path)) { $url .= "&utmp=" . urlencode($path); } $url .= "&guid=ON"; return str_replace("&", "&amp;", $url); } ?> ※</body>直前に挿入するコード <?php $googleAnalyticsImageUrl = googleAnalyticsGetImageUrl(); echo '<img src="' . $googleAnalyticsImageUrl . '" />';?> この他、ga.phpもDLしてサーバー上に配置しております。 回避方法をご存じの方、ぜひご教授いただけませんでしょうか。 何卒よろしくお願いいたします。

  • リファラーのデータ送信について

    こちらの質問(http://okwave.jp/qa3205563.html)で一定の解決を見たのですが、新たな問題が発生してしまったので教えてください。 sample.htmlへの記述 <script type="text/javascript"> var ref = document.referrer ; document.write("<script type=\"text/javascript\" src=\"​http://hoge.com.info.php?ref="+ref+"​\"></script>"); </script> で、refを送信したのですが、 受け取ったrefが、googleだと、 「http://www.google.co.jp/search?hl=ja」になってしまい、&で区切られている以降のデータ(つまり「q」)が取得できません。 別質問(http://okwave.jp/qa3200959.html)で、 hrm_mmmさんの回答======================================= $_SERVER['HTTP_REFERER']が対象ならば、以下で、$query_hashに、$_GETと同様のurldecode済みデータがハッシュ配列として得られます。 $url_hash = parse_url( $_SERVER['HTTP_REFERER'] ); if( array_key_exists( 'query', $url_hash ) and strlen($url_hash['query'])>0 ){ parse_str( $url_hash['query'], $query_hash); } // あとは、$url_hash['host'] によって切り分けて検索キー取り出しをすればよいと思います。 $word = ''; if( preg_match ("/\.google\./", $url_hash['host']) ) { $word = $query_hash['q']; } elseif( preg_match ("/\.yahoo\./", $url_hash['host']) ) { $word = $query_hash['p']; } elseif( preg_match ("/\.goo\.ne\.jp/", $url_hash['host']) ) { $word = $query_hash['MT']; } ====================ここまで============================ こんなんでやればいいよ。と教えていただいたのですが、グーグルから送られたref自体にqが入っていません。 というか、?以降の1番目のクエリーしか入ってきません。 ヤフーなら ?p=~でOK gooなら ?MT=~でOK google は hl=jaが一番最初にくるので、qがとれません。 なぜ、送信されてくるreferrerに2番目以降のパラメータがついてこないのでしょうか。。。 ちなみにsample.htmlで document.write(document.referrer)をやるとちゃんと全て表示されます。

  • 環境変数のHTTP_REFERERのチェック

    配布されたコードを見ているのですが、意味がわからないので 教えて下さい。 $referer_url[0] = 'http:\/\/localhost\/'; と宣言してあり、 そもそもlocalhostの意味もわかりません。 ##===================================== ## リンク元チェック処理 = ##===================================== if($REFERER_seigen == 1){   &ref_chk;   if ( $refchk==1 ){ #一致しなければ終了     print "エラー403";     exit;   } } という処理で、ref_chk関数を呼んでおりその中身が ##===================================== sub ref_chk{   $refchk = 1; #フラグの初期化(一致しない) = エラー403となる   foreach $url_temp(@referer_url){    if ( $ENV{'HTTP_REFERER'} =~ /^$url_temp/){     $refchk = 0; #前方が一致したのがあったらそのホストからだからOK    }   }   return $refchk; } とあります。前方が一致とはどういう意味でしょうか。

    • ベストアンサー
    • Perl
  • URLの一部を見てアクセス制限

    ある掲示板の改造で特定のURL以外からのアクセスを弾くものを作りたいのですが うまくいきません。 if($ENV{HTTP_REFERER} ne 'http://www.***.ne.jp/***.html(正規のリンク元)'){ if($ENV{HTTP_REFERER} ne 'http://www.***.ne.jp/***.cgi(掲示板のURL)'){ &error('不正アクセスです'); exit; } } で、始めはうまくいったのですが、掲示板で次のページに行こうとすると URLがhttp://www.***.ne.jp/***.cgi?page=2のように引数が付いてしまい、 不正アクセス扱いされてしまいます。 そこで、引数を覗いたhttp://www.***.ne.jp/***.cgiが含まれるもの全てを アクセス可能にしたいのですが、HTTP_REFERERとどのように一致させるのか わからないのです。 どのように記述すれば良いのでしょうか?

    • ベストアンサー
    • Perl
  • ファイルの構造

    ファイルの構造 ■親階層 ├■マルチドメインのドメイン毎のディレクトリ ├■htdocs ├□ga.php ├○m │├□.htaccess │├□index.html ├■hoge ├○m ├index.html ├□.htaccess となっており、 それぞれ二つのmディレクトリのindexを解析をとりたいと思っています。 サーバはx-serverの多分旧サーバになっています。 HTML自体は下記のようにしています。 PHP自体はあまり詳しくないため、差し込む位置が間違っているかも知れません。 テストとして、htdocs直下のmディレクトリの下のindexの設定で下記をやってみました。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <?php header("Content-type: application/xhtml+xml" ); // Copyright 2009 Google Inc. All Rights Reserved. $GA_ACCOUNT = "□□□□(ユーザー毎に違う部分)"; $GA_PIXEL = "../ga.php"; function googleAnalyticsGetImageUrl() { global $GA_ACCOUNT, $GA_PIXEL; $url = "http://○○○.com/"; $url .= $GA_PIXEL . "?"; $url .= "utmac=" . $GA_ACCOUNT; $url .= "&utmn=" . rand(0, 0x7fffffff); $referer = $_SERVER["HTTP_REFERER"]; $query = $_SERVER["QUERY_STRING"]; $path = $_SERVER["REQUEST_URI"]; if (empty($referer)) { $referer = "-"; } $url .= "&utmr=" . urlencode($referer); if (!empty($path)) { $url .= "&utmp=" . urlencode($path); } $url .= "&guid=ON"; return str_replace("&", "&amp;", $url); } ?> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis" /> <title>テスト</title> <style type="text/css"> <![CDATA[ a:link{color:#009933;} a:focus{color:#CC0000;} a:visited{color:#FF6600;} ]]> </style> </head> ===========中略====================== <?php $googleAnalyticsImageUrl = googleAnalyticsGetImageUrl(); echo '<img src="' . $googleAnalyticsImageUrl . '" />';?> </body> </html> .htaccessの設定 AddType x-httpd-php .html AddHandler server-parsed html 上記のようになっています。 PHPのバージョンは5にアップグレードしました。 htdocsの直下は普通のPCサイトのデータを置いて、同じ階層のmディレクトリに携帯用のページのデータを置いてます。 そして、hogeディレクトリの部分に他店舗のPCサイトのディレクトリを作って、その中のmディレクトリに携帯用ページの データをアップしています。 いろいろと間違っている部分等多いかと思いますが、ご指摘をいただければ助かります。 お願い致します。

    • 締切済み
    • PHP
  • phpのユーザーエージェントでの振り分け方法

    phpのユーザーエージェントでの振り分け方法 質問お願いします。 phpのユーザーエージェントでの振り分け方法を調べまして $ua = $_SERVER['HTTP_USER_AGENT']; if ((strpos($ua, 'Android') !== false) && (strpos($ua, 'Mobile') !== false) || (strpos($ua, 'iPhone') !== false) || (strpos($ua, 'Windows Phone') !== false)) { // スマートフォンからアクセスされた場合 header("Location: smartphone/index.html"); exit(); } elseif ((strpos($ua, 'Android') !== false) || (strpos($ua, 'iPad') !== false)) { // タブレットからアクセスされた場合 header("Location: tablet/index.html"); exit(); } elseif ((strpos($ua, 'DoCoMo') !== false) || (strpos($ua, 'KDDI') !== false) || (strpos($ua, 'SoftBank') !== false) || (strpos($ua, 'Vodafone') !== false) || (strpos($ua, 'J-PHONE') !== false)) { // 携帯からアクセスされた場合 header("Location: mobile/index.html"); exit(); } else { // その他(PC)からアクセスされた場合 header("Location: pc/index.html"); exit(); } とコピペで記入してスマホなどを振り分けています。 safari6とsafari7で見た時だけ header("Location: tablet/index.html"); に振り分けたいのですが、どうしたらよいでしょうか? 素人ですいません。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • リンク元制限

    同じような機能で使いやすいスクリプトがPerlでは見つからなかったため、phpのスクリプトを初めて設置してみました。 それで、phpの改造方法がわからなくて困っております。 以下Perlのサブルーチンのようなものを、配布されているphpに付け足して、リンク元制限を行いたいと考えていますが、phpでも同じようなことができますでしょうか?できるのでしたら方法を教えていただければ幸いです。宜しくお願いいたします。 sub referer{ $InURL[0] = "http://a.domain.com"; $InURL[1] = "http://b.domain.com"; local($match) = 1; foreach (@InURL) { if ($ENV{'HTTP_REFERER'} =~ /$_/) { $match=0; last; } } if ($match) { if ($lockflag) { &unlock; } print ""; exit; } }

    • ベストアンサー
    • PHP

専門家に質問してみよう