Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > Каким переменным окружения можно доверять?


Автор: Верлиока 22.1.2007, 14:11
Где бы найти список переменных окружения с пометкой, какие из них генерирует апач, и какие броузер?

Чтобы знать, с какими из них можно безопасно работать, а какие нужно проверять на вшивость.

Автор: Nab 22.1.2007, 20:14
Броузер не генерирует никаких переменных окружения на стороне сервера, их все генерирует сервер....
Те что относятся к вызывающей стороне начинаются обычно на REMOTE_*, $ENV{'RENMOTE_ADDR'} к примеру...

А доверять вы им в принципе обязаны smile Ибо больше нечему smile

Автор: Верлиока 22.1.2007, 20:23
Цитата(Nab @ 22.1.2007,  20:14)
Броузер не генерирует никаких переменных окружения на стороне сервера, их все генерирует сервер...

HTTP_REFERER и HTTP_COOKIE, например, заполняет броузер при отсылке запроса.
поэтому на проверке реферера вообще нельзя ничего серьёзного завязывать.
да и в куки нельзя писать ничего архиважного по этой же причине - легко подделать.

а вот подделать REMOTE_ADDR технически невозможно (или я не смог найти инфы), поэтому этой переменной можно спокойно пользоваться.

также, к примеру, DOCUMENT_ROOT или UNIQUE_ID (при наличии mod_unique_id) создает сам сервер, и они тоже безопасны.


понимаете о чем я? :)

Автор: Nab 22.1.2007, 20:46
Не понимаю smile

Переменные окружения не заполняются броузером, еще раз повторю, их заполняет сервер, в том числе и на основании данных полученных от клиента. И не доверять им повторюсь нельзя, ибо нечему больше smile 

Вы меня понимаете?

Куки естсессно нужно проверять, иначе нафига они вообще? Referer, обычно просто игнорируется, хотя я не понимаю зачем Вам он вообще нужен...
Вообще в любых данных приходящих от клиента нельзя быть уверенным smile но это не отменяет того, что получить данные о клиенте просто больше негде... smile
Кстати при ориентировке по DOCUMENT_ROOT я когда-то напоролся, сервер не корректно выставлял эту переменную, и я попадал в чужей каталог со скриптами... так что тут говорить о доверии к хостеру тоже можно smile

Автор: Верлиока 22.1.2007, 21:47
Цитата(Nab @ 22.1.2007,  20:46)
Переменные окружения не заполняются броузером, еще раз повторю, их заполняет сервер, в том числе и на основании данных полученных от клиента

да это одно и то же :))
чего к словам придираться?
просто с некоторыми переменными так: что броузер прислал, то и выведет сервер.
а это всё равно что броузер клиента их сам заполнит, нет? :)

хочу узнать какие переменные под контролем клиента.

Автор: djkostya 24.1.2007, 18:08
    /* variable name starts with */
    "HTTP_",

    /* variable name is */
    "AUTH_TYPE=",
    "CONTENT_LENGTH=",
    "CONTENT_TYPE=",
    "DATE_GMT=",
    "DATE_LOCAL=",
    "DOCUMENT_NAME=",
    "DOCUMENT_PATH_INFO=",
    "DOCUMENT_ROOT=",
    "DOCUMENT_URI=",
    "FILEPATH_INFO=",
    "GATEWAY_INTERFACE=",
    "LAST_MODIFIED=",
    "PATH_INFO=",
    "PATH_TRANSLATED=",
    "QUERY_STRING=",
    "QUERY_STRING_UNESCAPED=",
    "REMOTE_ADDR=",
    "REMOTE_HOST=",
    "REMOTE_IDENT=",
    "REMOTE_PORT=",
    "REMOTE_USER=",
    "REDIRECT_QUERY_STRING=",
    "REDIRECT_STATUS=",
    "REDIRECT_URL=",
    "REQUEST_METHOD=",
    "REQUEST_URI=",
    "SCRIPT_FILENAME=",
    "SCRIPT_NAME=",
    "SCRIPT_URI=",
    "SCRIPT_URL=",
    "SERVER_ADMIN=",
    "SERVER_NAME=",
    "SERVER_ADDR=",
    "SERVER_PORT=",
    "SERVER_PROTOCOL=",
    "SERVER_SOFTWARE=",
    "UNIQUE_ID=",
    "USER_NAME=",
    "TZ=",


Ребят не в тему но Апач собираеться с следующими списком окружения
Тобиш по дефолту.....с Suexec

Автор: ISQman 20.2.2009, 11:22
Доброго времени суток. Не хотел плодить тему про переменные окружения но столкнулся с такой проблемой:
Мне необходимо вызвать внешнюю комманду с содержанием айпишника , вот кусок кода:
Код

#!/usr/bin/perl -w                                                                                                                                            
                                                                                                                                                              
use strict;                                                                                                                                                   
                                                                                                                                                              
$ENV{PATH}='/bin:/sbin:/usr/bin:/usr/sbin';                                                                                                                   
                                                                                                                                                              
if ($ENV{HTTP_X_FORWARDED_FOR}){                                                                                                                              
    my $ip = $ENV{ HTTP_X_FORWARDED_FOR};                                                                                                                     
}else{                                                                                                                                                        
    my $ip = $ENV{REMOTE_ADDR};                                                                                                                               
}                                                                                                                                                             
                                                                                                                                                              
my @ver=`ipfw table 91 list | grep $ip`; 

но при вызове данной комманды получаю 500-ю ошибку :(, хотя при простом вызове `ipfw table 91 list | grep 192.168.0` всё отрабатывает нормально :(
прошу помощи ибо 3-и сутки в ступоре.... smile 




Автор: ginnie 20.2.2009, 11:40
ISQman, сделайте

Код

warn "ipfw table 91 list | grep $ip";


и посмотрите в логе, что не так.

Автор: ISQman 20.2.2009, 11:44
пробовал многие способыи результат ошибка 500

вот кусок лога
Insecure dependency in `` while running setuid at /usr/local/www/apache22/data/no_pay/index.cgi line 12.

из консоли при использовании warn выдало:
Use of uninitialized value in concatenation (.) or string at ./index.cgi line 12.


Автор: ginnie 20.2.2009, 12:21
ISQman, проблема связана с http://perldoc.perl.org/perlsec.html, надо попробовать 

Код

my ($untainted_ip) = $ip =~ /(\d+\.\d+\.\d+\.\d+)/;

my @ver=`ipfw table 91 list | grep $untainted_ip`;

Автор: ISQman 20.2.2009, 12:35
и снова ты меня спас)
огромное пасиба)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)