masterspammer (masterspammer) wrote,
masterspammer
masterspammer

Invalid method in request 9\x04

Отловил вчера замечательный баг. В логах апача - subj. (см. заголовок), на экране со стороны браузера - соединение было разорвано сервером. В интернете на заданную тему много разного, бессвязного (причём что характерно, без указания того, что у браузера) - значит копать самому.

Проблему воспроизвёл так: форма, в ней большой файл (и соответственно, multipart/form-data), посылается на скрипт, который НЕ читает посылаемые данные (спутал environ['wsgi.input'] и sys.stdin). Форма с маленьким файлом или без файла проходит. Исправил - работает... почти. Посылаю образ виртуальной машины (8 гигов) - то же самое.

Первое подозрение - файл с дырками и firefox не умеет с такими работать. Делаю честную копию через cat - эффект не меняется. Делаю сохранение файла - килобайт 8 с хвостом сохраняется (где-то случилось переполнение по модулю не иначе) и всё. Смотрю Content-length - а там всего 9к (и сервер так или иначе принимает не всё - поток-то всё те же 8 гигов). Беру chromium - всё заливается и работает как надо.

Что это было? На дворе - 21-й век и connection у нас как водится keep-alive. Если скрипт НЕ прочитает всё, что идёт после заголовка (ровно Content-length байт), то это прочитает браузер как следующий заголовок и скорее всего там будет ну совсем не заголовок (9\x04 это как раз оттуда) - в потоке идёт последовательность запросов и какой-то особой синхронизации (где кончился один и начался другой) нет.

Чего бояться? А нечего - просто ещё один из вариантов неправильно сформулированного запроса. Никто не мешает клиенту подать да хоть бинарные данные. Не уязвимость это.

Остаётся вопрос - а как корректно обрабатывать ситуацию, когда клиент данные посылает, а сервер их получать не хочет? Обрывать соединение (не факт, что скрипту это разрешено)? Посылать код ошибки (да хоть "метод не разрешён" - кто сказал, что тут POST ожидается) - но будет ли читать его браузер?
Tags: cms, РазборПолётов, Сервера
Subscribe

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 0 comments