スライドショー

phpのリファラはアクセス元がわかる!取得から書き換えまで解説

こんにちは!独学プログラマー&ライターのつぶらやです。

突然ですが、webサービスを作ると作ったサービスに人が訪れますが、その人達はどこから訪れてくるのでしょうか

そのカギを握るのが、リファラというものです。

リファラ?なにそれおいしいの?

という初心者だった私ですが、リファラについて学んできた事をお伝えしたいと思います。

リファラでわかる、君がどこから来たのか

どうやってサービスに来たのか。

どこかのサイト経由で辿り着いたのか、直にurlを知ってアクセスしたのか。

この「どこかのサイト経由」の「どこか」=リファラです。

リファラを知る事ができると、色々とアクセス数を増やす施策を考えたりも出来ます。

早速サンプルプログラムで取得してみましょう。

自分のサービスURLが、http://yyyyy.com/だったとします。

<?php
function httpsGet{
    $http_referer = $_SERVER['HTTP_REFERER'];
    var_dump($http_referer);
}
?>


結果

http://xxxxx.com/


http://yyyyy.com/にアクセスする前に、http://xxxxx.com/に居たという事が分かりました。

これがリファラの取得方法です。

簡単に取得できましたね。

取得できない事もある?リファラの注意点

簡単に取得できるリファラですが、実は確実なものではありません。

リファラが取得できない場合

リダイレクトをして移動してきた、アプリから移動してきた場合は正しく取得できないと言われています。

また、httpsのサイトからhttpのサイトへ移動してきた場合も取得できません。

この事から、リファラがある事を前提とした機能などは作成するべきではありません。

ただし、リファラによってページの出し分けや、セキュリティの面からリファラを活用する事も出来ますので上手く使い分けることを考えましょう。

リファラが偽装される場合

次の項目でお話しますが、リファラは簡単に偽装されます

リファラの内容を過信しすぎた機能はやはり作るべきではありません。

自分が思った通りの手順ですべての人が機能を利用してくれるならばいいのですが、悲しい事に悪意を持って来るユーザーもいらっしゃいます。

またURLの中に個人情報のパラメータを入れているとリファラの流出が、重大な個人情報流出にもなり得る時代です。

http://xxxxx.com/?age=30&zip=1111111

上記のようなURLがあった場合、ageから年齢、zipから郵便番号が予想できます。

開発者としてリファラの取り扱い、URLの取り扱いには気を付けたいですね。

リファラの書き換え(偽装)はできるの?

リファラをユーザー側からとプログラム側から書き換える方法をお話します。

ユーザー側から書き換える

リファラはユーザー側から以下のようなツールを使用して、簡単に偽装することが出来ます。

参考サイト↓
クロームブラウザのプラグイン Referer Control
FireFoxブラウザのプラグイン Smart Referer

プラグインを使用すれば書き換えだけでなくリファラの送信等について制限もできるようです。

プラグインを入れなくても、ブラウザ側から以前よりは削減されているという話も聞きます。

プログラム側から書き換える

こちらはあまり使用する事はないかもしれませんが、file_get_contentsを使用してサイトから情報を取得してくる場合、リンク元としてリファラを書き換えるサンプルコードの紹介です。

これを動かすとheader情報の中にリファラが入っている事が分かります。

http://yyyyy.com/が、情報を取得しようとしているサイトです。

リファラはhttp://xxxxx.com/に書き換えます。

$referer = "http://xxxxx.com/";

$opts = array( // 書き換える情報をまとめる
'http' => array(
'method' => "GET",
'header' => "Referer: ". $referer;
)
);
$context = stream_context_create($opts);

$uri = 'http://yyyyy.com/';

file_get_contents($uri, false, $context); // http://yyyyy.com/の情報を取得

上記の例だと、http://yyyyy.com/に対してのリファラにhttp://xxxxx.com/を設定することが出来ました。

file_get_contentsの使用方法については以下を参考にしてください。

まとめ

リファラ(referer)。

取り扱いについては、色々と気を付けなければいけないものです。

開発時にはくれぐれも、URLに個人情報などのパラメータを持つという事はしないようにしましょう。

それでは、また。

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

つぶらや

つぶらや

独学PG&SE、東京在住30代女性。
誰でもプログラマーになれるがモットーで、わかりやすい記事を目指しています。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説