0

URLにリンクが追加されたときにカスタムURLにリダイレクトするPHPスクリプトを作成するにはどうすればよいですか。たとえば、ユーザーがこれにアクセスすると、次のようになります。

http://mydomain.com/link.php?=http://www.google.com

それはそれらを即座にグーグルにリダイレクトするはずです。

理想的には、クリック自体がローカルに発生したことを確認することは可能ですか?

これは非常に基本的なPHPコードである可能性が高いことを認識していますが、知識が非常に限られているため、記述が制限されていることに注意してください。

4

3 に答える 3

2

$ _SERVER変数のHTTP_REFERERを使用して、それがローカルドメインからのものであるかどうかを確認できます。

参照: http: //php.net/manual/en/reserved.variables.server.php

リダイレクトについては、以下を使用してみてください

http://mydomain.com/link.php?r=http://www.google.com
header("Location:".$_GET['r']);

参照: http: //in3.php.net/manual/en/function.header.php

以下がうまくいくことを願っています。$domain変数をmydomain.comとしてハードコーディングできます。

$url = "http://www.php.net/index.html";
$domain = str_ireplace('www.', '', parse_url($url, PHP_URL_HOST));
$refDomain = str_ireplace('www.', '', parse_url($_SERVER["HTTP_REFERER"], PHP_URL_HOST));

if(strcmp($domain, $refDomain) == 0)
{
     //your code goes here
     header("Location:".$_GET['r']);
}
于 2012-10-15T17:12:47.040 に答える
2
http://mydomain.com/link.php?url=http://www.google.com

<?php
 header("Location: {$_GET['url']}");
?>

これ?

于 2012-10-15T17:09:13.730 に答える
0

わかりました、ここに完全な答えを追加したいと思います。

headerMrSilが言ったように、リダイレクトヘッダーを送信するために使用できます。

header("Location: $url"); // will redirect to $url!

他の人がリダイレクトスクリプトを使用できないようにする場合は、次のようにすることができます。

$ref = $_SERVER['HTTP_REFERER'];
$host = parse_url($ref, PHP_URL_HOST);
if($host !== "mydomain.com"){
  // out side request
}

しかし、その後、HTTP_REFERER簡単になりすましが発生する可能性があります。それで、より良いチェックは何でしょうか?

CSRF保護。それはやり過ぎのように見えるかもしれません、そしてそれはまたこのようなことをするための完璧な方法ではありませんが、それは助けになります。

また、完璧な解決策は存在しないと思います。

CSRFの詳細については、こちらをお読みください。

于 2012-10-15T17:27:04.220 に答える