Защита от sql injection и XSS

Много было написано на эту тему, но все равно эти уязвимости очень актуальны.
А защита от них элементарно проста.
Если не знаете о них, почитайте википедию: sqlInjection xss

Вы спросите как фильтровать данные полученные от пользователя?
— НИКАК! Не нужно ничего фильтровать! На все фильтры найдется масса вариантов обхода. Читаем дальше…
Защита от внедрения SQL-кода
Для защиты от sql Injection существует специальная php функция mysql_real_escape_string()
Также есть «подводный камень»: если в настройках сервера включена опция magic_quotes_gpc, то произойдет лишнее слеширование и хек. Для проверки этой опции можно воспользоваться ф-й get_magic_quotes_gpc(). Если она включена, то уберем лишнее экранирование stripslashes()

if(get_magic_quotes_gpc ())
{
   $input = stripslashes ($input);
}
$input = mysql_real_escape_string ($input);

Защита от внедрения HTML-кода (XSS)
Поскольку HTML-код не выполняется ни СУБД, ни PHP, ни другими серверными языками, а только браузером, то для сайта не опасно проникновение этого кода в базу данных.
Нужно только защитить пользователей сайта от выполнения этого кода. Для этого тоже есть готовая ф-я и даже не одна.
htmlspecialchars() — конвертирует специальные символы(& ” ’ < >) в HTML сущности (& » …). htmlentities() — идентична htmlspecialchars() за исключением того, что htmlentities() преобразует все символы в соответствющие HTML сущности (для тех символов, для которых HTML сущности существуют).

Не забываем, что в обоих этих функциях можно использовать жесткое указание кодировки и отношение к преобразованию кавычек:

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

Опция quote_style:
ENT_COMPAT — Преобразуются двойные кавычки, одиночные остаются без изменений.
ENT_QUOTES — Преобразуются и двойные, и одиночные кавычки.
ENT_NOQUOTES — И двойные, и одиночные кавычки остаются без изменений.

Есть ф-я strip_tags(), которая вырезает все теги HTML и PHP. Используется реже.

Защита выглядит так:

//... 
//получение данных из бд
//(в переменную $output)

//вот и вся защита
$output = htmlspecialchars($output,ENT_QUOTES,'UTF-8');

//подстановка переменной в шаблон
//и отправка страницы пользователю
//...