Железный скрипт Докучаев Дмитрий aka Forb Xakep, номер #069, стр. 069-130-4 Кроме этого, всегда используй опцию компилятора –w, которая выдает в STDERR так называемые предупреждения. Это не ошибки, однако код со множественными варнингами, как правило, небезопасен. Юзать или не юзать? Наконец, мы подошли к основному вопросу: чей код лучше использовать? Я не сторонник фриварных скриптов, но и не могу заставить отказаться от них. Решай сам: если сценарий заслуживает доверия и ты знаешь его код как свои 20 пальцев, – смело используй его в работе. Если же скрипт выглядит убого, а в исходнике нет ни одной проверки на спецсимволы – лучше напиши свой проект. Пусть он будет не слишком функциональным, зато тебя не сломает ни один хакер. Ошибка с номером 500 Меня часто спрашивают, по какой причине браузер выдает ошибку 500 при подаче запроса к сценарию. Так как моя задача – научить тебя кодить без ошибок, я просто обязан упомянуть про этот коварный баг. Ошибка 500 может появиться в следующих случаях: 1. Не оформлен хидер. Основное отличие консольного приложения от CGI-скрипта в том, что во втором случае браузеру обязательно пересылается тип данных. Поэтому убедись, что в твоем коде перед первым оператором print встречается строка print "Content-type: text/html\n\n"; 2. Неверный путь к интерпретатору. Удостоверься, что первая строчка в скрипте оформлена в виде правильного пути к Perl. На сервере интерпретатор может лежать в /usr/local/bin, а в сценарии указываться в виде /usr/bin. Данная проблема актуальна, в основном, для Windows-кодеров, где Perl может находиться в любой папке. 3. Присутствие синтаксических ошибок в коде. Прежде чем проверять скрипт через браузер, запусти его в консоли с ключиком –c. И только после положительного ответа интерпретатора, продолжай тестирование из web’а. 4. Присутствие символа «\r». Символ перевода каретки означает, что скрипт был залит в бинарном режиме. Переключи режим передачи в ASCII, либо набери консольную команду type ascii, и только потом закачивай сценарий на удаленный сервер. Защищайся регвыром! Самый популярный способ изоляции входных переменных от посторонних символов – регулярные выражения. Если честно, научиться регвырам довольно сложно. Даже я, несмотря на большой опыт в программировании, до сих пор не освоил эту прекрасную возможность языка. Но азы регулярных выражений я знаю, поэтому привожу несколько простых шаблонов, которые позволят усилить безопасность твоего скрипта. ~s/[\&\;\\\/\.\> \<\’\|\n\r\t]//g; - конструкция для удаления из переменной посторонних символов. Как ты понял, чары просто перечисляются в [] (естественно, если символы являются специальными, их надо экранировать). if ($in=~/[\;\|]/) { die print "You are lamer\n" } – можно также припугнуть взломщика, сказав ему, что ты следишь за своим кодом :). $in=~s/\D//g; - удаление из переменной всех нечисловых символов. Бывает полезным при анализе номера страницы, сообщения etc. $in=~s/\W//g; - то же самое, только переменная должна принимать буквенное значение (пробелы не в счет). $in=~s/\0//g; - уже известное тебе удаление нуль-байта. |