PHP: GET-данные автоматически объявляются как переменные

Возьмите этот код:

<?php
if (isset($_POST['action']) && !empty($_POST['action'])) {
    $action = $_POST['action'];
}

if ($action) {
    echo $action;
}
else { 
    echo 'No variable';
}
?>

Затем откройте файл с помощью? Action = test. Есть ли способ предотвратить автоматическое объявление $ action с помощью GET? Кроме, конечно, добавления

&& !isset($_GET['action'])

Зачем мне объявлять переменную за меня?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
9
0
3 812
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ответ принят как подходящий

Проверьте свой php.ini для настройки register_globals. Вероятно, он включен, вы хотите его выключить.

Why would I want the variable to be declared for me?

Вы этого не сделаете. Это ужасная угроза безопасности. Он делает переменные Environment, GET, POST, Cookie и Server глобальными (Руководство по PHP). Это несколько зарезервированные переменные в PHP.

Спасибо за ответ, это действительно то, что я искал. Но является ли мой пример единственным, на что влияет register_globals?

ehm 19.09.2008 17:47

Я написал немного больше в ответе выше - это влияет на среду, получение, публикацию, cookie и сервер.

owenmarshall 19.09.2008 17:55

Похоже, виноват register_globals в вашем php.ini. Вы должны выключить это. Это также огромный риск для безопасности.

Если вы используете общий хостинг и не можете изменять php.ini, вы можете использовать ini_set (), чтобы отключить register_globals.

Отключите register_globals, если я понимаю ваш вопрос. См. http://us2.php.net/manual/en/language.variables.predefined.php

Вы можете проверить, все ли переменные объявлены правильно, установив уровень журнала PHP в PHP.INI на

error_reporting  =  E_ALL 

Теперь ваш фрагмент кода должен сгенерировать УВЕДОМЛЕНИЕ.

В какой-то момент истории php они приняли неоднозначное решение отключить register_globals по умолчанию, поскольку это представляло огромную угрозу безопасности. Это дает любому возможность вводить переменные в ваш код, что приводит к немыслимым последствиям! Эта "функция" даже удалена в php6.

Если вы заметили, что он включен, обратитесь к администратору, чтобы выключить его.

если у вас нет доступа к php.ini, ini_set('register_globals', false) в скрипте php не будет работать (переменные уже объявлены) .htaccess с:

php_flag register_globals Off

иногда может помочь.

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