Безопасная запись любых POST в базу данных

Тема в разделе "Защита и взлом", создана пользователем Serafimer, 26 авг 2014.

Статус темы:
Закрыта.
  1. Serafimer

    Serafimer Создатель

    Заблокирован
    Регистр.:
    24 апр 2014
    Сообщения:
    36
    Симпатии:
    17
    Доброго времени суток! Так как новичок, то задался вопросом безопасного хранения пользовательских данных. Так как же всё-таки защититься от SQL инъекций? Пока в голову приходит только хранение в base64 формате. То есть перед записью в базу данных конвертировать данные в base64, а при выводе раскодировывать. Достаточно ли это безопасно? Поиск по базе данных не требуется.
     
  2. aurora2000

    aurora2000 Создатель

    Регистр.:
    24 авг 2014
    Сообщения:
    30
    Симпатии:
    3
  3. Serafimer

    Serafimer Создатель

    Заблокирован
    Регистр.:
    24 апр 2014
    Сообщения:
    36
    Симпатии:
    17
    Так она же изменяет строку вродь. Разве нет? ДА и мануале написано что она не экранирует символы % и _.
     
  4. aurora2000

    aurora2000 Создатель

    Регистр.:
    24 авг 2014
    Сообщения:
    30
    Симпатии:
    3
  5. kise97

    kise97 Создатель

    Регистр.:
    22 июн 2012
    Сообщения:
    16
    Симпатии:
    2
    Чтобы защитится, нужно фильтровать пользовательские данные перед добавлением а БД, например вот так, если вы используете PDO

    Код:
    $item = $pdo->prepare('SELECT * FROM item WHERE title = :title');
    $item->execute(array('title'=> $title));
    И если вы используете RAW запросы, то можно и нужно использовать `mysql_real_escape_string` или `mysqli:escape_string`.

    Вот и все.
     
  6. Serafimer

    Serafimer Создатель

    Заблокирован
    Регистр.:
    24 апр 2014
    Сообщения:
    36
    Симпатии:
    17
    Конкретно меня интересуют именно RAW-запросы, содержащие всевозможные символы и т.п.. При этом необходимо сохранить ихнюю целостность, а mysql_real_escape_string похоже тупо экранирует опасные символы. Что же я в итоге получу на выходе? Да, я ламер в этом плане. И ещё вопрос - будет ли любая строка, кодированная в base64_encode() 100% безопасной для тупого INSERT INTO `texts` VALUES ('encoded_string'); ?
     
  7. aurora2000

    aurora2000 Создатель

    Регистр.:
    24 авг 2014
    Сообщения:
    30
    Симпатии:
    3
    да, будет 100% безопасной
     
  8. kise97

    kise97 Создатель

    Регистр.:
    22 июн 2012
    Сообщения:
    16
    Симпатии:
    2
    Просто все данные будут переданы в запрос в безопасном варианте, сама строка не изменится, функция mysql_real_escape_string только экранирует и все. + прочитайте `Замечания` на странице документации по этой функции.

    Вы я так понял, не знаете что такое экранирование. Вот вам простой пример на PHP
    Код:
    <?php
    
    echo 'This is example of \'escaping\'', "<br>", "This is example of 'escaping'";
    
    ?>
     
    Serafimer нравится это.
Статус темы:
Закрыта.