ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 

  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА














     АРХИВ :: Apache-Talk
Apache-Talk mailing list archive (apache-talk@lists.lexa.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re[2]: [apache-talk] POST-грабли (Was: unknown action 'member' '0')



(cначал сори - забыл Subj челевеческий сделать вместо того что скрипт шлет)

PY>> Имеем RH 6.0 + Apache 1.3.9 + rus 28.22 + mod_perl 1.21
PY>> Скрипт сидит через PerlHandler и читает POST-данные через $r->read(.....)
IO> Это, конечно, не очень решение, но все же: почему бы не
IO> воспользоваться libapreq (оно же Apache::Request) и вообще не заниматься
IO> разбором форм вручную?
Это конечно не ответ на вопрос ;-)

Смотрим реализацию того чем там пологается читать запрос
> int ApacheRequest___parse(ApacheRequest *req)
> {
>     request_rec *r = req->r;
> 
>     req->parsed = 1;
> 
>     if (r->method_number == M_POST) { 
>         const char *ct = ap_table_get(r->headers_in, "Content-type"); 
а именно вот это прекрасное место
>         if (ct && *ct == 'a' && strEQ(ct, DEFAULT_ENCTYPE)) {
                                  ^^^^^  строго равно не так ли ?
DEFAULT_ENCTYPE это разумеется
 'application/x-www-form-urlencoded'

а куда пойдет запрос с
 'application/x-www-form-urlencoded; charset=koi8-r'

куда ?????

>             return ApacheRequest_parse_urlencoded(req);
>         }
>         else if (ct && *ct == 'm' && strstr(ct, "multipart/form-data")) {
>            return ApacheRequest_parse_multipart(req); 
>         }
>         else {
а вот прямо вот сюда
>             ap_log_rerror(REQ_ERROR, 
>                           "[libapreq] unknown content-type: `%s'", ct); 
>             return HTTP_INTERNAL_SERVER_ERROR;
На эти грабли я уже нарвался с $r->content() - там тоже == вместо =~
А до этого доооооолго не мог понять чего это у меня на subscribe.ru
не могут Lynx пользоваться. На все что можно грешил у себя, но до
такого прикола еле додумался.

Так же просьба не передлагать CGI.pm - по исходникам все сводится
как и у $r->read() к обычному ap_get_client_block() у которого на входе сидит
не прочитаное поле хидера запроса. Так что вопросы остаются:

- кто нарывалcя ?
- Победили зверя ?
- напомните что за примочка "DigExt" у 'Mozilla/4.0 (compatible; MSIE 5.0; 
Windows 98; DigExt)'

>         }
>     } 
>     else {
>         return ApacheRequest_parse_urlencoded(req); 
>     }
> }

-------------------------------------------------
Pavel Yakovlev   http://www.citycat.ru/
WebMaster and coAuthor of CityCat project.
e-mail: hac@citycat.ru ICQ 8085803     PPY-RIPN
-------------------------------------------------
"If it looks like a bug, waddles like a bug, and quacks like a bug, its a 
quack!"


=============================================================================
=               Apache-Talk@lists.lexa.ru mailing list                      =
Mail "unsubscribe apache-talk" to majordomo@lists.lexa.ru if you want to quit.
=       Archive avaliable at http://www.lexa.ru/apache-talk                 =



 




Copyright © Lexa Software, 1996-2009.