История изменений
Исправление KivApple, (текущая версия) :
По идее правильно так:
При формировании SQL запроса прогонять все параметры через mysql_real_escape_string или аналог для твоей БД.
При выводе значения из БД в HTML прогонять через htmlspecialchars.
Производить html'лизацию текста в БД не следует - мало ли зачем он потом тебе пригодится. К тому же есть риск переусердствовать и вызвать htmlspecialchars дважды - при сохранении и при выводе. Лучше сохранить исходный вид. SQL Injection возможен лишь в момент запроса, в самой БД можно хранить любые данные совершенно безопасно. А вызов htmlspecialchars это задача функции рендеринга страницы, а не сохранения в БД.
Я обычно реализую функцию-обёртку - она принимает переменное число аргументов (не менее 1), для всех аргументов кроме первого проводит mysql_real_escape_string, затем вызывает vsprintf с первым аргументом в качестве формата и всем остальным в качестве параметров. А уже полученную строку отдаёт mysql_query. В итоге можно очень удобно написать:
query('SELECT * FROM pages WHERE id = «%s»;', $_GET['page_id']);
Просто, безопасно, наглядно.
Исходная версия KivApple, :
По идее правильно так:
При формировании SQL запроса прогонять все параметры через mysql_real_escape_string или аналог для твоей БД.
При выводе значения из БД в HTML прогонять через htmlspecialchars.
Производить html'лизацию текста в БД не следует - мало ли зачем он потом тебе пригодится. Лучше сохранить исходный вид. SQL Injection возможен лишь в момент запроса, в самой БД можно хранить любые данные совершенно безопасно.