безопасные данные с переносом строк из textarea

Тема в разделе "PHP", создана пользователем sunyang, 8 июн 2012.

Модераторы: latteo
  1. sunyang

    sunyang

    Регистр.:
    25 апр 2009
    Сообщения:
    444
    Симпатии:
    30
    я приномаю в $_POST['i_am'] данные из texarea поля.
    Нужно их записать в базу с учетом переносов на новую строку, да еще чтобы была защита от sql-инъекций и XSS-атак.
    написал вот так:
    PHP:
    $i_am =nl2br(htmlspecialchars($_POST['i_am'], ENT_QUOTES));
    или лучше вот так написать?:
    PHP:
     $i_am str_replace("\\n","<br>",mysql_real_escape_string($_POST['i_am'])); 
    с защитой от инъекций вроде норм справляется mysql_real_escape_string, но она экранирует \n которые мы должны преобразовать в <br> функцией nl2br(), чтобы учесть переходы на новую строку.

    Как лучше защититься с учетом переносов?
     
  2. ev-goo

    ev-goo Создатель

    Регистр.:
    28 май 2012
    Сообщения:
    10
    Симпатии:
    9
    Можно сделать что то подобное
    PHP:
    $i_am mysql_real_escape_string (trim (strip_tags ($_POST['i_am'])));
    Затем записываешь их базу. Ну а выводишь из базы через функцию nl2br

    PHP:
    while ($row mysql_fetch_assoc($result)){
                
    $newsbr nl2br ($row['news']);
               
            }
     
    Sankaboy и sunyang нравится это.
  3. sunyang

    sunyang

    Регистр.:
    25 апр 2009
    Сообщения:
    444
    Симпатии:
    30
    чет при таком методе, у меня в базу кавычки записались, как есть: ' и " без экранирования.
    Это нормально?
     
  4. recasher2k12

    recasher2k12

    Регистр.:
    19 фев 2012
    Сообщения:
    156
    Симпатии:
    78
    В базу они так и должны записаться только данные (кавычки и другие всевозможные символы), а экранируешь их именно в SQL-запросе, чтобы не прошли xss, а также чтобы просто запрос не сломался при появлении в данных кавычек.
     
  5. dino

    dino

    Регистр.:
    28 май 2009
    Сообщения:
    550
    Симпатии:
    204
    Одна кавычка ` в записываемых данных приведет в ошибке записи в БД, если не при записи, так потом при выводе инфы из базы... имхо данные изначально нужно утюжить функцией htmlspecialchars($_POST['i_am'], ENT_QUOTES) и всякую лабуду типа тегов, кавычек и прочего преобразовывать в html сущности... тогда при дальнейшей обработке не будет возникать проблем...
     
  6. ev-goo

    ev-goo Создатель

    Регистр.:
    28 май 2012
    Сообщения:
    10
    Симпатии:
    9
    Ничего подобного. Все без проблем записывается и выводится.
     
  7. Sankaboy

    Sankaboy Постоялец

    Регистр.:
    1 фев 2012
    Сообщения:
    112
    Симпатии:
    3
    Здесь раз раз не приходится. Дино прав, вылезет при какой-то ситуации. Сам убедился, мучился с этим безопасным вводом в БД.
     
  8. recasher2k12

    recasher2k12

    Регистр.:
    19 фев 2012
    Сообщения:
    156
    Симпатии:
    78
    Ребята, в mysql можно хранить хоть exe-файлы. Какие вам там кавычки мешают работе mysql? Вы о чем?!?! :D
     
  9. _Dark_

    _Dark_ Постоялец

    Регистр.:
    29 июл 2011
    Сообщения:
    67
    Симпатии:
    29
    Пользователь Dino скорее всего имел в виду не `, а '
     
  10. zek24

    zek24

    Moderator
    Регистр.:
    14 ноя 2009
    Сообщения:
    776
    Симпатии:
    230
    не столько ответ, сколько вопрос - я правильно понял, что проверку по-хорошему лучше делать трижды?

    - на стороне юзера (JS)
    - на стороне сервера (php)
    - на стороне БД (sql)
    Или достаточно только пхп, дабы не перегружать "систему"?