aiohttp POST многокомпонентный файл заблокирован ModSecurity - PullRequest
0 голосов
/ 26 января 2020

Я загружаю файл на сервер nginx и всегда получаю ошибку Bad Request. Сценарий Python:

async def post():
    file_name = '/tmp/a.txt'
    with aiohttp.ClientSession() as session:
        with open(file_name, 'rb') as f:
            async with session.post(url, data={'0':f}) as resp:
                print(resp.status, resp.reason)

if __name__ == '__main__':
    asyncio.get_event_loop().run_until_complete(post())

Он печатает:

400 Плохой запрос

Файл /tmp/a.txt содержит текст

привет \ n

Журнал ошибок с моего сервера:

ModSecurity: ошибка многоэтапного анализа: Multipart: неверный заголовок Content-Disposition (-11 ): форма-данные; имя = "0"; имя файла = "a.txt"; имя файла * = UTF-8''a.txt. [hostname "www.domain.com"] [uri "/upload.php"] ModSecurity: доступ запрещен с кодом 400 (этап 2). Требуется совпадение «eq 0» с «REQBODY_ERROR». [file "/etc/httpd/modsecurity.d/00_asl_z_antievasion.conf"] [line "35"] [id "330791"] [msg "Не удалось проанализировать тело запроса. Это может быть атака несоответствия несоответствия, неработающее приложение или разорванное соединение. Это не ложное срабатывание. Проверьте приложение или клиент на наличие ошибок. "] [data" Ошибка многоэтапного анализа: Multipart: неверный заголовок Content-Disposition (-11): form-data; name = \ x220 \ x22 ; filename = \ x22a.txt \ x22; filename * = utf-8''a.txt. "] [серьезность" CRITICAL "] [тег" no_ar "] [имя хоста" www.domain.com "] [uri" / upload. php "]

Как это исправить или любой обходной путь? Я могу изменить скрипт python, но не правила безопасности на сервере.

...