URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 4114
[ Назад ]

Исходное сообщение
"Раздел полезных советов: Кратко о безопасности в CGI скриптах на Perl"

Отправлено auto_tips , 12-Авг-04 00:37 
- Главное правило - всегда явно проверять все переменные полученные из внешних источников
    (cgi-параметры, cookie, переменные окружения, имя файла и путь (при листинге директории по readdir));

- Вырезать спецсимволы в переменных используемых в сис. функциях (open(), system(), ``) и обращениях к sql.
    вырезание: s/[^\w\d_\-.]//g или tr/;<>*|?`&$!#{}[]:'\/\n\r\0// для open(), system(), ``.
    не забывать про \0 (передают , который воспринимается как конец стоки)
    Пример: $var="../../etc/passwd|\0"; open(F, "/home/test/$var.txt")

- при открытии файла на чтение в open() всегда указывать "<$file";

- Осторожность при использовании переменной внутри eval() и regex (/\Q$var\E/ иначе можно подставить ?{код}).

- Нельзя проверять числовые параметры через "if ($var > 0)", так как может пройти $var="123;somecode";


URL:
Обсуждается: http://www.opennet.ru/tips/info/621.shtml


Содержание

Сообщения в этом обсуждении
"Кратко о безопасности в CGI скриптах на Perl"
Отправлено Vict0r , 12-Авг-04 00:37 
"Нельзя проверять числовые параметры через "if ($var > 0)""
А как их тогда проверять?

"Кратко о безопасности в CGI скриптах на Perl"
Отправлено leonid sopov , 21-Сен-05 12:34 
после того как получили или в момент получения
1) $var=int($var);
2) $var=~s/\D//g; /лучше все же 1 вариант/