2013-09-22 1 views
0

Я просто хочу его подтвердить, потому что mysql внесут некоторые изменения в комментарий, например, HTML-код, который он добавляет \" Я знаю, что он защищен, но вы можете мне предложить? Я сначала сохраняю его в базу данных, а затем показываю его в поле комментариев.Безопасно сохранять комментарии пользователей без проверки: mysql_real_escape_string

Я использую:

Или я должен использовать это:

if (isset($_POST['comment-post'])) { 
    $comment = mysql_real_escape_string($_POST['comment']); 
    if ($id != "" && strlen(trim(preg_replace('/\xc2\xa0/',' ',$comment))) != 0) { 
     $add = mysql_query("UPDATE users SET comments='$comment' WHERE id='$id'"); 
    } 
} 

Пример комментария пользователь может опубликовать это:

Hello how are you? 
<img src="http://i840.photobucket.com/albums/zz324/wonderfulworld1/Hearts/rt28h.gif"> 
+0

Его никогда не было в безопасности, чтобы просто заменить этого персонажа и оставить остальное как есть, его всегда лучшая идея для правильной санировки. Однако понятие интерполяции строк в запросах с использованием расширения 'mysql_ *' само по себе становится устаревшим на минуту, переходить к 'mysqli' или' PDO' и использовать подготовленные операторы. –

+0

Да, его становится все труднее и труднее справляться с MySQL_, спасибо, я постараюсь, чтобы обновить его до mysqli, что не займет много времени для меня. –

ответ

3

Я бы рекомендовал прекратить использование функций Mysql_ *, они устарели и исчезнут с PHP в более поздних версиях.

Проверьте PDO или Mysqli, оба из них подготовили заявления, которые помогут вам в решении подобных проблем.

+0

Да, я скоро буду использовать «Mysqli_». –

+1

Скоро скоро не будет :) –

+0

Затем используйте подготовленные заявления, и вы будете в безопасности, не нужно избегать строки или чего-то еще. – Jite

1

Нет, это не безопасно. Код, который вы опубликовали, уязвим для SQL injections при выполнении запроса и межсайтового скриптинга, когда комментарий отображается на ваших страницах.

Вы всегда должны фильтровать пользовательский ввод, экранируя его с помощью mysqli_real_escape_string и strip_tags (или filter_var) функций.

+0

Обратите внимание, что 'mysqli_real_escape_string' не работает с расширением MySQL. – Gumbo

0

mysql_real_eascape_string защищает от атак SQL-атаки, но не дезинфицирует данные против других возможных атак. То же самое верно для подготовленных заявлений. Если вы используете mysql, вам следует избегать корректных данных.

Однако, если вы показываете данные пользователя, вам необходимо убедиться, что данные, отображаемые вами, также чисты. Вы должны защищать теги повторений, например <script></script>, которые появляются в вашем потоке вывода без ответа.

Смежные вопросы