Как проверить, передается ли какая-либо переменная в 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"
}
Если в этом массиве есть что-то, вы по существу их обнаружили. Кроме того, вы можете использовать логику, чтобы отсеять известные параметры запроса, которые вы могли бы использовать на вашем сайте, и действовать соответствующим образом, если вы обнаружите, что считаете нужным.