<rmcreative>

RSS

Все заметки с тегом «sql injection»

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

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

    7 марта 2016

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

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

    17 комментариев
  2. Yii 2.0 HP Fortify WebInspect SQL Injection: Blind

    10 апреля 2015

    Знакомые попросили проверить отчёт сканирования приложения Yii 2.0 на безопасность. Среди прочего HP Fortify WebInspect нашёл "SQL Injection: Blind" по URL:

    http://example.com/post/view?id=10%27%09and%091%09%3d%09if(5%3d5%2c%09sleep(200)%2c%090)%09and%09%271%27%3d%271
    

    что расшифровывается как

    `10'    and 1   =   if(5=5, sleep(2000),    0)  and '1'='1`
    

    То есть классически закрыли кавычку и т.д.

    Сделал тестовое приложение, запустил, получил страницу с постом с id = 10. То есть сканер среагировал на то, что нет ошибки или 404. Возможно, что SQL injection прошёл успешно.

    Полез в код, там ничего особенного:

    public function actionView($id)
    {
        $model = News::findOne($id);
        if (!$model) {
            throw new HttpException(404);
        }
        return $this->render('index', ['model' => $model]);
    }

    Полез глубже и убедился, что параметр не вставляется в SQL. Используется prepared statement, всё как положено. Задумался.

    Выполнил в консольке MySQL вот такое:

    select * from post WHERE id = '10lalalallala';

    Получил запись с id = 10 и вспомнил, что MySQL приводит строки к int-у почти как PHP. То есть, что бы мы не вставили после 10, MySQL переварит и не поперхнётся.

    В итоге:

    • С Yii всё хорошо.
    • HP Fortify нашёл то, чего нет, и пометил как критическое.
    7 комментариев