)
{
print;
}
Листинг 39.
Один из примеров некорректной защиты от доступа к другим файлам.
Проблема решается при помощи фильтрации данных – удаляющие из ввода клиента все представляющие угрозу опасные символы или выдает ошибку в случае их обнаружения. Подобных символов много и к сожалению для каждой определенной функции они специфичны. Например, open следующие комбинации и символы представляют опасность:
"\0" - задание конца строки
"-" чтение со стандартного ввода
">",">>" и "+>" открытие файла для записи, дозаписи и перезаписи соответственно
"&" обращение к файловому манипулятору
"" и "`" запуск программы
"+<" открытие файла для записи и чтения
".." и "/" - обращение к вышележащим каталогам
О возможностях обращения к файлам по их манипулятору следует особо отметить. Например, существует секретный файл (номера кредитных карт или пароли), открывающийся в начале работы приложения, а далее на экране появляется содержимое документа, требуемый клиентом, до закрытия данного файла. Если злоумышленникам будет доступен исходник теста скрипта или примерная манера разработчика, то это позволит без труда прочесть содержимое секретного файла, воспользовавшись самой программой, просто передав вместо исходного имени, его манипулятор.
open (psw,"passwd") die; #открытие файла паролей
#...некоторый код...
print "введите имя файла:"
#запрос имени отображаемого файла
$filename=<>; chop $filename;
if ($filename eq "passwd")
#проверка имени на корректность
{print "Hello,Hacker!\n";die;}
open(f,$filename) die; #вывод файла на экран
while()
{
print;
}
Листинг 40 Пример, демонстрирующий несанкционированный доступ к секретному файлу через его манипулятор
Если ввести "<&psw", или "<&=psw", то на экране появится содержимое секретного файла – пароли.