Я, вероятно, немного толстый, но я не могу найти ответ на этот вопрос. Я перехожу с сервера с глобальными регистрами, чтобы он был включен. Это хорошо, но, к сожалению, я привык к годам и годам работы с глобальными регистрами, которые были включены, что привело к тому, что я писал неаккуратный код. Теперь я пытаюсь это исправить.
Я пытаюсь переписать старый код с переменными переменными в $ _POST.
Я знаю, что это глупый пример, но он иллюстрирует проблему, которую я пытаюсь решить. Следующее будет работать с глобальными регистрами ON:
<?php $variable = "fullname";?>
<form action="/test/" method="post">
<label for="fullname">Full Name:</label> <input name="fullname" type="text" value="<?php echo $$variable;?>" size="20" maxlength="150" />
<input name="submit" type="submit" value="Go!" />
</form>
Как мне заставить эту работу с регистровыми глобалами отключиться? Следующее явно не работает:
<?php $variable = "fullname";?>
<form action="/test/" method="post">
<label for="fullname">Full Name:</label> <input name="fullname" type="text" value="<?php echo $_POST[$$variable];?>" size="20" maxlength="150" />
<input name="submit" type="submit" value="Go!" />
</form>
Перейдите легко на мне- я знаю, что я, наверное, глупо, но я не могу получить мою голову вокруг этого.
Теперь я чувствую себя глупо - так просто! Надеюсь, я не единственный, кто страдает от случайного замораживания мозга! – iagdotme
Кстати, я проверил множество проверок безопасности на переменную, чтобы обнаружить какие-либо материалы с перекрестными скриптами, но я думаю, что пример, который у вас есть для htmlspecialchars, является хорошим, быстрым и простым. – iagdotme
Я был бы обеспокоен «обнаружением XSS» на входе. На базовом уровне это не так, как работают проблемы с экранированием строк. Каждая попытка входа в XSS для входа в исходное состояние обречена на провал: она блокирует вполне допустимый ввод (например, здесь, где я набираю '
У меня есть некоторые формы взаимодействия, похожие на ваши, но я не могу понять, почему вы используете $ _POST в форме. Что вы должны знать:
источник
2010-08-27 14:43:25
Даниэль, технически, как он это делает, ничем не отличается от того, как вы это делаете. За исключением того факта, что вы создаете еще одну переменную. Хотя на современном дневном веб-сервере это не очень интенсивно, приятно отметить, что вы в основном играете в игру с чашкой и мячом с переменной. –
Как я уже сказал, приведенный выше код был глупым примером и не является фактическим кодом, который я использую. – iagdotme
Разница в том, что я выбираю $ _POST в PHP выше формы, а не в самой форме. Это более организованный и менее вероятный разрыв –
$ _POST - это массив, не так ли.
источник
2010-08-27 14:43:49
Вы уверены, что вы имели в виду
$_POST[$$variable]
в отличие от$_POST[$variable]
источник
2010-08-27 14:45:54 SubSevn
вы можете избавиться от всей
$$
сумасшествия и просто сделать$_POST[$variable]
.источник
2010-08-27 14:46:17
Использование переменных переменных непосредственно из $ _SUPER globals - это идея BAD и риск для безопасности, особенно если какой-либо из ваших кодов является открытым исходным кодом. Можно было бы изменить ввод, чтобы сориться и узнать значение любой переменной, которую вы пропускаете. Например, они могли бы передать «$ _ENV», который бы дал им свалку переменных среды. На самом деле, регистровые глобальные значения - это плохая идея.
Об этом говорится в ответе @ bobince.
И, что касается вашего вопроса, вот почему ваш пример не работает с отключением глобальных регистров PHP. PHP более строг (по уважительной причине) с выключенным регистром global, afaik, сложнее сделать трюк переменной переменной.
источник
2010-08-27 14:57:32 nessence