LINUX.ORG.RU

История изменений

Исправление 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 возможен лишь в момент запроса, в самой БД можно хранить любые данные совершенно безопасно.