Помимо этой опечатки в строке 2 (должно быть $ return = $ _GET ['return'];) вы должны сделать $ return = urlencode ($ return) , чтобы убедиться, что $ return является допустимый QueryString, поскольку он передается в качестве параметра в index.php.
index.php должен затем проверить, что return является допустимым URL-адресом, к которому у пользователя есть доступ. Я не знаю, как работает ваш index.php, но если он просто отображает страницу, вы можете получить что-то вроде index.php? / Etc / passwd или аналогичное, что действительно может быть проблемой безопасности.
Редактировать: Какую дыру в безопасности вы получаете? Я вижу две возможные проблемы, в зависимости от того, как index.php использует возвращаемое значение:
- Если index.php перенаправляет пользователя на целевую страницу, то я мог бы использовать ваш сайт в качестве ретранслятора для перенаправления пользователя на сайт, которым я управляю. Это может быть использовано либо для фишинга (я делаю сайт, который выглядит точно так же, как ваш, и запрашивает у пользователя имя пользователя / пароль), либо просто для рекламы.
- Если index.php отображает файл из return-параметра, я мог бы попытаться передать имя некоторого системного файла, такого как / etc / passwd, и получить список всех пользователей. Или я мог бы передать что-то вроде ../config.php и получить подключение к вашей базе данных
- Не думаю, что здесь так, но это такая распространенная дыра в безопасности, которую я все же хотел бы отметить.
Как уже говорилось, вы хотите убедиться, что URL, переданный через строку запроса, действителен. Вот несколько способов сделать это:
- $ newurl = "http://yoursite/". $ Return;
- это может гарантировать, что вы всегда находитесь только на своем домене и никогда не будете перенаправлять на любой другой домен
- $ valid = file_exists ($ return)
- Это работает, если $ return - это всегда страница на жестком диске. Проверяя, что return действительно указывает на действительный файл, вы можете отфильтровать фиктивные записи
- Если return примет строки запроса (то есть return = profile.php? Step = 2), вам нужно будет разобрать путь "profile.php"
- иметь список допустимых значений для $ return и сравнить с ним
- это обычно непрактично, если вы действительно не спроектировали свое приложение так, чтобы index.php мог возвращать только заданный набор страниц
Есть много способов снять шкуру с этого кота, но обычно вы хотите как-то проверить, что $ return указывает на действительную цель. Каковы эти действительные цели, зависит от вашей спецификации.