Как проверить, передается ли какая-либо переменная в GET в URL

У меня есть ситуация, когда кто-то пытается саботировать мою учетную запись Google AdSense, постоянно посылая информацию, идентифицирующую личность, в URL моего сайта. Как я могу заблокировать это или, по крайней мере, обнаружить случайные величины, которые они используют?

Например, имя переменной может быть НИЧЕГО.

mysite.com/?asdfd=emailaddress@gmail.com

или же

mysite.com/?gfrewgtr1=emailaddress@gmail.com

...?

Единственное, о чем я могу подумать, это собрать известные переменные и затем выполнить перенаправление расположения заголовка на основной URL сайта.

2 ответа

Решение

Если: вы не хотите иметь параметры GET, проверьте, пусто ли $_GET

if (!empty($_GET)) {
    header('Location: ' . $_SERVER['SCRIPT_NAME']);
    exit;
}

Или: проверьте $_GET для недопустимых параметров:

$allowed_params = ["id", "some_param", "another one"];
foreach($_GET as $key => $val)
    if (!in_array($key, $allowed_params)) {
        // if something's wrong, get out!
        echo('Location: '.$_SERVER['SCRIPT_NAME']);
        exit;
    }

// everything is ok here

Примечание: перед любым header()s вы не должны иметь никакого выхода. В противном случае вы получите ошибку. Лучше разместите код в самом верху вашего скрипта.

$_GET Зарезервированная переменная будет содержать любые параметры, переданные в URL.

var_dump($_GET);

Будет выводить:

array(1) {
  ["asdfd"]=>
  string(22) "emailaddress@gmail.com"
}

Если в этом массиве есть что-то, вы по существу их обнаружили. Кроме того, вы можете использовать логику, чтобы отсеять известные параметры запроса, которые вы могли бы использовать на вашем сайте, и действовать соответствующим образом, если вы обнаружите, что считаете нужным.

Другие вопросы по тегам