Я создаю интранет PHP для своего босса. Простой клиент, порядок, заключает систему в кавычки. Это будет запрещаться доступа из Интернета и только использоваться 3 людьми. Я не так обеспокоен безопасностью, как я с проверкой. JavaScript, отключает на всех машинах.
Проблема, которую я имею, является этим:
:;[]"'
и т.д.Мой вопрос - это:
Если сотрудник неоднократно не введет данных в шаг 1, то они будут продолжать движение между шагом 1 и 4, каждый раз, имея htmlspecialchars () относился к данным.
So that:- &
becomes:- &
becomes:- &
becomes:- &
и т.д.
Как я могу остановить htmlspecialchars () применяемый многократно к данным, которые уже убраны?
Спасибо, Adam
См. Страницу руководства по htmlspecialchars :
string htmlspecialchars (string $ string [, int $ quote_style = ENT_COMPAT [, string $ charset [, bool $ double_encode = true ]]])
вариант $ double_encode
должен быть тем, что вы ищете.
Однако при правильно настроенном потоке данных это не должно вообще быть возможным, кроме случаев, когда есть данные, поступающие от пользователя или сторонней службы, которые могут или не могут уже содержать HTML-кодированные символы. (Не то чтобы я за свою карьеру не построил несколько неправильно настроенных потоков данных. Но именно поэтому я знаю, почему так важно, чтобы они были чистыми и четко определенными.: -)
Вы должны использовать только htmlspecialchars
в выводе HTML и никогда больше.
<input name="var" value="<?php echo htmlspecialchars($var)?>">
Если $ var
содержит, скажем, амперсанд, то в HTML будет выведено закодированное значение:
<input name="var" value="this&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 .
So that:- &
becomes:- &
becomes:- &amp;
becomes:- &amp;amp;
Вы просто ошибаетесь. Просто попробуйте и увидите
<form>
<input name="a" value="<?=htmlspecialchars($_GET["a"])?>">
<input type=submit>
</form>