|
|
|
POST файлов на веб-сервер. Разорвать коннект, не дожидаясь конца передачи.
|
|||
|---|---|---|---|
|
#18+
POST файлов на веб-сервер. Разорвать коннект, не дожидаясь конца передачи. Из-за проксей, не поддерживающих HTTP 100 (этот "Expect: 100-continue"), я не могу включать этот заголовок в POST-запрос, следовательно приходится делать один POST-запрос сразу со всем содержимым. Как в этом случае на сервере защититься от POST со стороны гада, у которого нет кошерного sid? Как можно на сервере в 2-х вариантах - php и CGI (FastCGI/C++) разорвать соединение ещё до окончания передачи всех данных (которых мож.быть много)? Файлы будут поститься на URI http://example.com/?sid=81728172. Мне нужно порвать соединение, если sid в запросе отличен от заданного. Да, такие вот запросы одновременно с GET и POST-данными, хотя наверное это php-шная терминология, а "?sid=123" - просто часть URI под CGI-названием QUERY_STRING. В PHP шарю плохо, но вроде бы там на момент передачи управления в скрипт уже доступна вся информация по запросу со всеми пирогами, т.е. запрос уже пришёл целиком, то есть сервер уже принял все вложенные в POST файлы и положил во временный каталог, даже если они были неизвестно от кого и по 100 гигов. Как с помощью PHP рвать соединение неизвестно от кого и без HTTP 100? Если в PHP это невозможно, то возможно ли в FastCGI / C++? Предпочтительнее второе, но если можно на PHP, то как временное решение сойдёт. То есть я хочу такого поведения: хакер постит гигабайтный файл без sid, на сервер успевает падать килобайт 100, на которые хакер получает TCP ACK (из-за буфферизации и быстрых каналов), параллельно с этим FastCGI-приложение читает строку запроса и понимает, что соединение надо рвать, отправляет какой-нибудь "HTTP 400", по которому сервер желательно закрывает коннект, чтобы клиент больше не получал никаких TCP ACK на данные, которые продолжают с него литься). Кстати, как отработает веб-сервер, если FastCGI уже "всё понял" и выдал веб-серверу ответ для клиента, а с клиента продолжает литься продолжение файла, который он постит? Это будет "исключение" на уровне HTTP и будет закрыт уровень TCP? Или может попасться такой веб-сервер, который пока не дождётся прихода полного запроса не будет слушать ответы от FastCGI-стороны? Наверное можно этот sid запихать в "POST-параметры", но это фиолетово. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2011, 03:26 |
|
||
|
|

start [/forum/topic.php?fid=16&gotonew=1&tid=1342636]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
184ms |
get topic data: |
10ms |
get first new msg: |
5ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 246ms |
| total: | 529ms |

| 0 / 0 |
