<rmcreative>

RSS

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

  1. Опасность слепой проверки заголовка X-Forwarded-For

    15 апреля 2012

    Сегодня пришёл pull-request в Yii на эту тему. В классе CHttpRequest есть метод getUserHostAddress, который отдаёт нам IP пользователя. Предложение было перед возвратом $_SERVER['REMOTE_ADDR'] проверить, а нет ли чего в $_SERVER['HTTP_X_FORWARDED_FOR'], и, если есть — вернуть. Мотивация — будут видны IP пользователей за прокси.

    Так как такое заблуждение встречается ну очень часто, я даже не сразу вспомнил, откуда берётся $_SERVER['HTTP_X_FORWARDED_FOR']. А берётся он из заголовка HTTP запроса X-Forwarded-For и означает это то, что придти нам может что угодно.

    А теперь представим, что разработчик воспользовался изменённым методом getUserHostAddress, проверяющим X-Forwarded-For:

    if(in_array(Yii::app()->request->getUserHostAddress(), $allowedAddresses))
    {
      // даём доступ к админке
    }

    Тем, кто пишет на Zend Framework, кстати, стоит проверить свой код потому как Zend_Controller_Request_Http::getClientIp() без переданного аргументом false как раз проверяет X-Forwarded-For:

    /**
      * Get the client's IP addres
      *
      * @param  boolean $checkProxy
      * @return string
      */
      public function getClientIp($checkProxy = true)
      {
        if ($checkProxy && $this->getServer('HTTP_CLIENT_IP') != null) {
          $ip = $this->getServer('HTTP_CLIENT_IP');
        } else if ($checkProxy && $this->getServer('HTTP_X_FORWARDED_FOR') != null) {
          $ip = $this->getServer('HTTP_X_FORWARDED_FOR');
        } else {
          $ip = $this->getServer('REMOTE_ADDR');
        }
        return $ip;
      }

    Заслал репорт в трекер Zend Framework на всякий случай.

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

    2 октября 2011

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

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

    1. Можно и нужно сделать лимит на количество попыток ввода пароля. По достижении лимита можно, например, просить ввести капчу. Однако, если произойдёт «утечка» базы данных, что, конечно, бывает не так часто, но бывает, ограничение не поможет.
    2. Хорошим решением будет в дополнение сделать вычисление хеша более ресурсоёмкой операцией. Пользователь не заметит, а вот для взломщика перебор станет, если не невозможным, то, как минимум, финансово невыгодным. Реализуется, например, при помощи bcrypt. Выглядеть это может примерно как здесь.
    27 комментариев
  3. 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 комментария
  4. SVN strikes back: big projects are in danger

    25 сентября 2009

    С таким заголовком изначально планировался выход адаптации статьи Антона Исайкина и 2-х товарищей, ставшей очень популярной в очень короткое время.

    Из-за большей, чем у нас на Родине полит-корректности и суровых наказаний за пренебрежение оной, статья подверглась правкам и изначально выглядела довольно глупо.

    К счастью, редактор Smashing Magazine Виталий Фридман прислушивается к мнению авторов. Поэтому, адаптация хоть и не вышла столь сенсационной, но получилась, по-моему вполне достойной.

    Читаем

    2 комментария
  5. Были получены исходники 3300 глобальных интернет-проектов

    23 сентября 2009

    Антон Исайкин и сотоварищи очень интересным способом смогли получить исходники 3300 глобальных интернет-проектов. И это не какие-то там мелкие домашние странички, а Яндекс, Рамблер, Opera и т.д.

    Как это было и как с этим бороться читаем на Хабре

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

    12 октября 2008

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

    Часть 1

    Часть 2

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