Алгоритм предельно прост:
- При вставке в БД экранируйте данные при помощи mysql_real_escape_string или аналогичной функции. Никаких других преобразований при вставке в БД делать не нужно.
Пример:<?php $title = mysql_real_escape_string($title); $text = mysql_real_escape_string($text); $description = mysql_real_escape_string($description); $result= mysql_query("UPDATE TableName SET title='$title',date='$date',description='$description',text='$text' WHERE id='$id'"); ?>
- При выводе в браузер, полученные из БД данные, фильтруйте при помощи htmlspecialchars. эта функция преобразует все HTML спецсимволы типа
<
,>
или&
в специальные HTML-сущности, которые никак не интерпретируются браузером, а только отображают соответствующий символ.
Пример:<?php $myrow['title']=htmlspecialchars($myrow['title'], ENT_QUOTES); $myrow['description']=htmlspecialchars($myrow['description'], ENT_QUOTES); $myrow['text']=htmlspecialchars($myrow['text'], ENT_QUOTES); echo"<p><textarea name='title' rows='2'>".$myrow['title']."</textarea></p> <p>Краткое описание с тегами:<br/><textarea name='description' id='description' rows='3'>".$myrow['description']."</textarea></p> <p>Полное описание с тэгами:<br/><textarea name='text" rows='8'>".$myrow[text]."</textarea></p>"; ?>
В большинстве случаев этих двух простых правил вполне достаточно, что бы защитится от XSS.
См. ссылки про HTML-сущности и структуру HTML документа
Добавить комментарий