<rmcreative>

RSS

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

  1. Yii2, контроль доступа

    25 июня 2013

    В Yii 1.1 фильтр accessControl был очень гибким:

    // blacklist
    return array(
      array('deny',
        'users' => array('*'),
        'actions' => array('index'),
      ),
    );
     
    //whitelist
    return array(
      array('allow',
        'users' => array('*'),
        'actions' => array('view'),
      ),
      array('deny'),
    );

    Он позволял контролировать доступ как в стиле blacklist, так и whitelist. В Yii2 остался только whitelist. Это единственный нормальный и действительно безопасный подход в данной ситуации:

    //whitelist
    public function behaviors()
    {
      return array(
        'access' => array(
          'class' => 'yii\web\AccessControl',
          'rules' => array('allow' => true,
              'users' => array('*'),
              'actions' => array('view'),
          ),
        ),
      );
    }
    26 комментариев
  2. Приняли SHA-3

    3 октября 2012

    NIST принял решение, что же станет SHA-3. Из 64 конкурсантов был выбран Keccak. Выбирали пять лет.

    SHA-2 пока не сломали, но то, что уже есть резервный вариант, радует. Тем более SHA-3 обсчитывается быстрее.

    Ещё раз напомню, что использовать SHA и md5 для хеширования паролей не стоит.

    4 комментария
  3. Запомнить во всех браузерах

    26 апреля 2012

    Не так давно задался вопросом кроссбраузерного «запоминания» пользователя на сайте. Не потому, что действительно была такая потребность. Просто в пришло в голову и решил проверить, насколько это возможно. Оказывается, вполне возможно и даже применяется.

    Логика подсказывает, что для того, чтобы несколько браузеров считали какое-то значение, значение должно быть установлено в нечто, которое всеми браузерами используется. Первым на ум приходит Flash. Его «Flash Cookie» или Local Shared Object оказывается вполне рабочим решением, которое используется, например, в Яндексе. Есть и в готовом виде с обёрткой для JavaScript.

    Также стоит упомянуть evercookie. Штука очень «злая». Хранит информацию огромной кучей разных способов: обычные cookie, Flash, Silverlight, HTML5 LocalStorage и другие. Всего их 13. При попытке удаления части данных, библиотека их восстанавливает. Отлично должно подойти для отлова клонов, хотя, конечно, тут уже попахивает печеньками с тёмной стороны.

    10 комментариев
  4. Опасность слепой проверки заголовка 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 комментариев
  5. Современный брутфорс и безопасный логин

    2 октября 2011

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

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

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

    25 сентября 2009

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

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

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

    Читаем

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

    23 сентября 2009

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

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

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

    12 октября 2008

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

    Часть 1

    Часть 2

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