1

次のコードを持つlinks.php:

$ipaddress = $_SERVER["REMOTE_ADDR"];
<p><a href="track.php?page=http://www.google.co.uk" target="_blank">google.co.uk</a></p>
<p><a href="track.php?page=http://www.bbc.co.uk" target="_blank">bbc.co.uk</a></p>
<p><a href="track.php?page=http://www.cnn.com" target="_blank">cnn.com</a></p>
<p><a href="track.php?page=http://www.yahoo.co.uk" target="_blank">yahoo.co.uk</a></p>

クリックされたリンクをキャプチャする track.php:

mysql_connect("localhost", "root", "") or die(mysql_error());
mysql_select_db("mydb1") or die(mysql_error());

$redirect = mysql_real_escape_string($_GET['page']);
$ipaddress = $_SERVER["REMOTE_ADDR"];

$page_insert = mysql_query("INSERT INTO link_track (myurl, myip1, mydate) VALUES ('$redirect', '$ipaddress', now())") or die(mysql_error());

header("Location: $redirect");

誰かが track.php に直接アクセスするのを防ぐ方法はありますか。

どうぞよろしくお願いいたします。


追加の質問に対する私の謝罪: URL から一部を削除したい場合はhttp://www.、track.php コードを次のように変更できます:

mysql_connect("localhost", "root", "") or die(mysql_error());
mysql_select_db("mydb1") or die(mysql_error());

$redirect = mysql_real_escape_string($_GET['page']);
$redirect2 = parse_url($redirect, PHP_URL_HOST);
$redirect2 = preg_replace('/^(www\.)/i', '', $redirect2);
$ipaddress = $_SERVER["REMOTE_ADDR"];

$page_insert = mysql_query("INSERT INTO link_track (myurl, myip1, mydate) VALUES ('$redirect2', '$ipaddress', now())") or die(mysql_error());

header("Location: $redirect");
4

2 に答える 2

4

リンクが機能するには Web アクセス可能である必要があるため、誰かが直接アクセスするのを止めることはできませんが、URL クエリ文字列にページ パラメーターが含まれていない例外を処理することはできます。

if (empty($_GET['page'])) {
   header("HTTP/1.0 400 Bad Request", true, 400);
   exit('400: Bad Request');
} else {
   // code from current track.php

}
于 2013-06-27T13:43:38.537 に答える
0

の助けを借りてユーザーを停止できますsession

    session_start();
    $_SESSION['user'] = 1;

    if(!isset($_SESSION['user'])) {
    header("location:links.php");
    }else {
// your insert query
}
于 2013-06-27T13:43:36.470 に答える