• Как надо хешировать пароли и как не надо

      image

      В очередной раз, когда мы заканчивали проводить аудит информационной безопасности веб-проекта, моя личная бочка с гневом переполнилась негодованием так, что оно перелилось через край в этот пост.

      Постараюсь очень лаконично и быстро обрисовать ситуацию с хэшами.

      Сразу определю какую задачу применения хешей буду рассматривать — аутентификация пользователей. Не токены восстановления паролей, не аутентификация запросов, не что-то еще. Это также не статья про защиту канала передачи данных, так что комментарии по challenge-response и SSL неуместны!

      Читать дальше →
    • Типичная ошибка при установке COOKIE в PHP

        Хочу поделиться одной особенностью при установке значений COOKIE, которую очень часто забывают веб-разработчики.
        В моей практике исследования веб-приложений на уязвимости, за 2009-2011 года, данная ошибка встретилась в 87% веб-приложений, написанных на PHP.
        Чтобы как-то уменьшить данный показатель, решил написать этот текст.

        Речь пойдет даже не о httpOnly флаге, хотя его использование не менее важно и обязательно к применению.
        Читать дальше →
      • Логические уязвимости при составлении SQL запросов с LIKE

          Когда пользовательские данные попадают в запрос под оператор LIKE следует быть предельно внимательными.
          Дело в том, что ни одна функция фильтрации, включая mysql_real_escape_string, и даже prepared statements не защитят от логических ошибок, связанных с wildcard символами.

          В нашей практике аудита веб-приложений, данная ошибка встречается примерно в каждом пятом веб-приложении, уязвимом к SQL-инъекциям (19.3%).

          Оператор LIKE используется для поиска по неточному значению, строковых типов.
          Синтаксис оператора позволяет использовать wildcard семантику, где
          % заменяет классический * — последовательность любых символов
          _ заменяет классический? — любой одиночный символ

          Частая ошибка разработчиков состоит в том, что символы % и _ не фильтруются в попадании пользовательских данных в SQL запрос. Да, нарушить синтаксис запроса, то есть выполнить внедрение операторов, в этом случае нельзя, но может пострадать логика работы веб-приложения.
          Читать дальше →
        • Самый частый шаблон SQL инъекций в РНР — бесполезное экранирование символов

          По роду своей деятельности, мне приходится выполнять аудиты безопасности исходного кода веб-приложений.
          Много веб-приложений и много кода…

          В этой статье я хотел бы поделиться одной простой (очень простой) истиной и статистикой, которые вывел и многократно проверил в течении трех последний лет просмотра тонн РНР кода.

          Не секрет, что уязвимости внедрения операторов СУБД (SQL injections) являются самыми распространенными из всех серверных уязвимостей веб-приложений. Есть платформы и фреймворки, где такие вещи практически полностью исключены, например ORM'ом и прочим. Но статистика упорно говорит нам об абсолютном преобладании на просторах Интернета веб-приложений с простыми конкатенированными SQL запросами. Кроме того, есть случаи, где ORM вообще применим быть не может. Например, когда от пользовательских данных должны зависеть не только параметры выражений, но и сама логика запроса на уровне операторов.
          Читать дальше →