Большие тексты через POST не сохраняет в бд

Тема в разделе "Как сделать...", создана пользователем The_Wolf, 23 мар 2014.

  1. The_Wolf

    The_Wolf

    Регистр.:
    21 окт 2013
    Сообщения:
    339
    Симпатии:
    189
    Не сохраняет в бд большие тексты (через post) .
    Как сделать чтобы работал ?

    Кусок кода который сохраняет текст в бд :
    PHP:
                $id                        =    $_POST['id'];
                
    $title                    =    htmlspecialchars($_POST['title']);
                
    $content                 =    $_POST['content'];
                
    mysql_query ("
                UPDATE text SET
                    title='
    $title',
                    content='
    $content'
                    WHERE id='
    $id'
                    "
    );
     
  2. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.036
    Симпатии:
    2.040
    Какой тип данных у поля? Версия PHP какая?
     
  3. The_Wolf

    The_Wolf

    Регистр.:
    21 окт 2013
    Сообщения:
    339
    Симпатии:
    189
    LONGTEXT
     
  4. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.036
    Симпатии:
    2.040
     
  5. The_Wolf

    The_Wolf

    Регистр.:
    21 окт 2013
    Сообщения:
    339
    Симпатии:
    189
  6. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.036
    Симпатии:
    2.040
    Ну для начала, код должен быть примерно таким:
    PHP:
                $title                    =    mysql_real_escape_string(htmlspecialchars($_POST['title']));
                
    $content                 =    mysql_real_escape_string(htmlspecialchars($_POST['content']));
    Скорее всего в $content какие-либо спецсимволы были...
     
    ishkval нравится это.
  7. ishkval

    ishkval Постоялец

    Регистр.:
    2 окт 2013
    Сообщения:
    102
    Симпатии:
    35
    Как первое. Как второе не помешало бы чтобы воспринимались спец символы оборачивать это дело в base64 а то так фактически sql injection получается.
     
  8. The_Wolf

    The_Wolf

    Регистр.:
    21 окт 2013
    Сообщения:
    339
    Симпатии:
    189
    То есть зашифровать Base64 . да ?
    как здесь можно атаковать через sql инъекцию ?
     
  9. Alekc

    Alekc Постоялец

    Регистр.:
    9 мар 2014
    Сообщения:
    50
    Симпатии:
    26
    Примерно так
    [​IMG]

    Где ваша query может магически превратиться в

    Код:
    "UPDATE text SET title='lol';-- , content='$content' WHERE id='$id'
    (все что после -- воспринимается у mysql как коментарий)

    http://pentestmonkey.net/cheat-sheet/sql-injection/mysql-sql-injection-cheat-sheet
     
  10. ishkval

    ishkval Постоялец

    Регистр.:
    2 окт 2013
    Сообщения:
    102
    Симпатии:
    35
    Да шифровать в base64 тогда можно принимать в базу все символы, а так обрабатывать запросы как написал Горбушка, mysql_real_escape_string и htmlspecialchars, а id вообще intval-ом. Главное правило в php - не доверять пользователю всё жестко проверять, ничего лишнего не пропускать.
     
    The_Wolf нравится это.