Как заблокировать HTML в моей форме ввода? - PullRequest
1 голос
/ 11 апреля 2011

Итак, у меня есть базовый небольшой скрипт, который принимает ввод из HTML-формы, обрабатывает PHP и затем записывает его в текстовый файл в виде CSS. У меня уже есть какой-то придурок, пытающийся отбросить таблицы на сервере (SQL не существует, но я бы хотел, чтобы никто не пытался делать это) ввод через htmlentities или что-то еще?

Форма HTML

<html><body>
<h4>Codes Form</h4>
<form action="codes.php" method="post"> 

Username: <input name="Username" type="text" />
Usercode: <input name="Usercode" type="text" /> 

<input type="submit" value="Post It!" />
</form>
</body></html>

PHP

    <html><body>
 <?php 

 $Friendcode = $_POST['Usercode'];
 $Username = $_POST['Username'];

echo "You have recorded the following information on the server ". $Username . " " . $Usercode . ".<br />"; echo "Thanks for contributing!";


$output = ".author[href\$=\"$Username\"]:after { \n"
       ."content: \" ($Usercode)\" !important\n"
       ."}";
}
$fp = fopen('file.txt', 'a');
fwrite($fp, $output);
fwrite($fp, "\n");
fclose($fp);
?>


</body></html>

Ответы [ 7 ]

2 голосов
/ 11 апреля 2011

Всякий раз, когда вы включаете данные, введенные пользователем в HTML-код , всегда рекомендуется сначала закодировать данные, передав их в htmlspecialchars().

Думайте об этом как о камере дезактивации. Это гарантирует, что любые специальные главы HTML, такие как «<» и «>» (смертельные вирусы), правильно экранированы (уничтожены) и не будут отображаться на вашей странице как «настоящие» теги HTML (не будут создавать ваша веб-страница заболела).

Аналогично, вы также должны кодировать пользовательский ввод при включении его в SQL-запросов . Функция, которую вы используете для этой цели, зависит от базы данных, которую вы используете. Из-за динамического характера PHP, если вы включаете числовое значение в запрос SQL, вы должны сначала убедиться, что переменная содержит число, используя такие функции, как is_numeric() и ctype_digit().

2 голосов
/ 11 апреля 2011

Вы можете использовать htmlentities , чтобы преобразовать HTML-теги в их HTML-эквивалент.<и т. д. Или вы можете использовать <a href="http://in.php.net/manual/en/function.strip-tags.php" rel="nofollow"> strp_tags , чтобы избавиться от всех HTML-тегов.Если вы используете sql, используйте mysql_real_escape_string , чтобы сделать sql запросы более безопасными

0 голосов
/ 12 апреля 2011

Используйте PHP для преобразования каждого символа в числа HTML! Перейдите к htmlentities () для подробностей об этом.

0 голосов
/ 11 апреля 2011

@ Zer0mod: я бы использовал strip_tags , чтобы избавиться от HTML, и mysql_real_escape_string , чтобы позаботиться о любых возможных инъекциях SQL.

0 голосов
/ 11 апреля 2011

Что произойдет, если кто-то прямо наберет URL-адрес code.php в браузере.Они получат Уведомление о неопределенном смещении.

Вы должны сделать хотя бы проверку, если $_POST не пусто.

if(isset($_POST['submit']) && !empty($_POST))
{
  //do operation
}

Проверить имя пользователя и код пользователя для специальных символов ичто вы позволяете им вводить с помощью PHP sever side

0 голосов
/ 11 апреля 2011

Я бы предложил сделать это как на стороне клиента, так и на стороне сервера, с помощью регулярного выражения.Пример на стороне клиента можно найти здесь: jQuery удалить все теги HTML, КРОМЕ Якоря

0 голосов
/ 11 апреля 2011

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

Например, ограничьте ввод буквами, цифрами и подчеркиванием и обрежьте пробелы в начале и конце строки. Эта проверка завершится неудачно, когда в качестве входных данных будет предоставлен HTML-код.

...