<rmcreative>

RSS

Все заметки с тегами «Безопасность, PHP»

Можно уточнить:

    (1)
    (2)
    (2)
    (1)
    (1)
  1. mysql_real_escape_string() не защитит от SQL-инъекций

    7 марта 2016

    Вопреки древнему поверию, гласящему, что mysql_real_escape_string() защищает от SQL инъекций, функция этого не делает.

    Единственный, более-менее надёжный способ избежать SQL инъекций — использовать подготовленные запросы (prepared statements) с параметрами.

    18 комментариев
  2. Случайные байты, числа и UUID в PHP

    31 января 2016

    Tom Worster, специалист по безопасности, помогающий поддерживать её в Yii на отличном уровне, поделился решениями для чистого PHP. Решения отличаются краткостью и отсутствием абстракции, что позволяет легко их проверить и избежать неприятных побочных эффектов.

    Пользуемся

    Комментировать
  3. Составные части хеш-строки bcrypt

    26 ноября 2015

    Хороший способ хранения данных для аутентификации — хеш-строки bcrypt. В PHP это реализуется при помощи crypt с алгоритмом blowfish. В более поздних версиях PHP — при помощи password_hash. В Yii для этого есть Security::generatePaswordHash(). Выглядит строка на выходе вот так:

    $2y$13$YUUgrko03UmNU/fe6gNcO.Hka4lrdRlkq0iJ5d4bv4fK.sKS.6jXu

    Длина в случае пароля всегда 60 символов.

    • 2y - версия алгоритма bcrypt. Мы используем blowfish, так что в новых версиях PHP должна быть всегда 2y.
    • 13 - cost. Стоимость вычислений. 2^13 итераций функции формирования ключа.
    • Оставшееся — конкатенированные соль и хеш, закодированные через base64 с немного нестандартным набором символов. Первые 22 символа — 16 байт соли. Оставшееся — хеш.

    При сравнении пароля bcrypt достаёт версию алгоритма, cost и соль из хеш-строки сохранённого пароля. Далее, используя их, вычисляет хеш нового пароля и сравнивает с сохранённым хешем.

    4 комментария
  4. Уязвимость dev/random и других UNIX-устройств под Windows

    20 октября 2015

    Разрабатывая код для PHP не забывайте про Windows.

    Скриншот подготовил thefsb.

    12 комментариев
  5. Перестаньте использовать mcrypt

    13 мая 2015

    Сегодня в очередной раз всплыла статья об распространённых ошибках при реализации шифрования. Сама по себе она ничего так, но местами учит плохому. А именно, использовать mcrypt.

    Почему его не стоит использовать

    mcrypt не обновлялся более десяти лет и не планирует. Авторы его забросили. В нём есть серьёзные недоработки.

    И что делать?

    Мы в Yii от него ушли в сторону OpenSSL, чего и вам советую. Реализовал переход, в основном, Tom Worster. У него есть серия интересных постов на тему.

    8 комментариев
  6. Современный брутфорс и безопасный логин

    2 октября 2011

    Оказывается, любой печатный восьмисимвольный пароль в домашних условиях ломается перебором всех комбинаций за три с половиной дня. Это при том, что хеширован он вполне современным sha256. Всего несколько лет назад на такой перебор могли уйти годы, а то и вся жизнь.

    Что же теперь делать?

    1. Можно и нужно сделать лимит на количество попыток ввода пароля. По достижении лимита можно, например, просить ввести капчу. Однако, если произойдёт «утечка» базы данных, что, конечно, бывает не так часто, но бывает, ограничение не поможет.
    2. Хорошим решением будет в дополнение сделать вычисление хеша более ресурсоёмкой операцией. Пользователь не заметит, а вот для взломщика перебор станет, если не невозможным, то, как минимум, финансово невыгодным. Реализуется, например, при помощи bcrypt. Выглядеть это может примерно как здесь.
    27 комментариев
  7. PHP, валидация и массивы

    2 ноября 2009

    Наверное, многие сталкивались с задачей ввода произвольного числа одноимённых полей через форму. В PHP это сделано довольно удобно: в форме к имени поля добавляется [] и на стороне сервера в $_POST, $_GET или $_REQUEST мы получаем уже массив.

    В любом коде необходимо проверять данные, пришедшие из форм и адресной строки. В любом хорошем коде они проверяются. Но вот про эту особенность с квадратными скобками очень часто забывают.

    http://example.com/list.php?q=test
    http://example.com/list.php?q[]=test

    Довольно безобидный код, в котором нет проверки:

    $q = null;
    if(!empty($_GET['q'])) {
      $q = $_GET['q'];
    }
    // тут начинаем работать с $q как со строкой

    А вот менее безобидный пример: в WordPress до версии 2.8.4 можно было таким вот образом сгенерировать новый пароль администратора без отсылки ему каких-либо писем.

    3 комментария
  8. Роковые ошибки PHP

    12 октября 2008

    Описание распространённых и не очень уязвимостей PHP с примерами. Очень полезный материал для всех, кто хочет писать хороший защищённый код.

    Часть 1

    Часть 2

    Комментировать