htmlspecialchars () - Как и когда использовать и избежать совместного использования

Я создаю интранет PHP для своего босса. Простой клиент, порядок, заключает систему в кавычки. Это будет запрещаться доступа из Интернета и только использоваться 3 людьми. Я не так обеспокоен безопасностью, как я с проверкой. JavaScript, отключает на всех машинах.

Проблема, которую я имею, является этим:

  1. Сотрудник вводит допустимые данные в форму, содержащую любое из следующих :;[]"' и т.д.
  2. $ формы _POSTS эти данные к validationAndProcessing.php странице, и определяет, ввел ли сотрудник данные или не в к полям. Если они не сделали они перенаправляются назад к странице ввода данных и полю, которое они пропустили, выделяется в красном.
  3. htmlspecialchars () применяется ко всем данным, повторно заполняемым к форме от того, что они ввели ранее.
  4. Форма затем повторно отправлена validationAndProcessing.php странице, если успешные данные вводятся в базу данных, и сотрудник взят для отображения страницы данных.

Мой вопрос - это:

Если сотрудник неоднократно не введет данных в шаг 1, то они будут продолжать движение между шагом 1 и 4, каждый раз, имея htmlspecialchars () относился к данным.

So that:- &
becomes:- &
becomes:- &
becomes:- &

и т.д.

Как я могу остановить htmlspecialchars () применяемый многократно к данным, которые уже убраны?

Спасибо, Adam

5
задан Tatu Ulmanen 2 June 2010 в 11:48
поделиться

3 ответа

См. Страницу руководства по htmlspecialchars :

string htmlspecialchars (string $ string [, int $ quote_style = ENT_COMPAT [, string $ charset [, bool $ double_encode = true ]]])

вариант $ double_encode должен быть тем, что вы ищете.

Однако при правильно настроенном потоке данных это не должно вообще быть возможным, кроме случаев, когда есть данные, поступающие от пользователя или сторонней службы, которые могут или не могут уже содержать HTML-кодированные символы. (Не то чтобы я за свою карьеру не построил несколько неправильно настроенных потоков данных. Но именно поэтому я знаю, почему так важно, чтобы они были чистыми и четко определенными.: -)

5
ответ дан 14 December 2019 в 13:27
поделиться

Вы должны использовать только htmlspecialchars в выводе HTML и никогда больше.

<input name="var" value="<?php echo htmlspecialchars($var)?>">

Если $ var содержит, скажем, амперсанд, то в HTML будет выведено закодированное значение:

<input name="var" value="this&amp;that">

Однако пользователь увидит только то и то в своем поле ввода. , а при отправке $ _ GET ['var'] будет это и то , а не закодированная версия.

Что касается PHP, то единственное, что вы можете сделать, это убрать косую черту, если включены магические кавычки:

if (get_magic_quotes_gpc())
    $var = stripslashes($_POST['var']);
else
    $var = $_POST['var'];

Оттуда вы должны хранить в базе данных необработанные данные, а не версии в кодировке HTML. Чтобы избежать внедрения SQL, используйте mysql_real_escape_string , если вы используете обычные функции mysql, или используйте вместо него PDO .

4
ответ дан 14 December 2019 в 13:27
поделиться
So that:- &
becomes:- &amp;
becomes:- &amp;amp;
becomes:- &amp;amp;amp;

Вы просто ошибаетесь. Просто попробуйте и увидите

<form>
<input name="a" value="<?=htmlspecialchars($_GET["a"])?>">
<input type=submit>
</form>
-3
ответ дан 14 December 2019 в 13:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: