Привет, ребята, у меня есть эта строка кода в Perl-скрипте, где я позволяю пользователям загружать 5-секундную запись с микрофона на мой сервер. Вспышка, которая выполняет запись, автоматически ограничивает микрофон до 5 секунд, а затем отправляет запись на мой сервер.
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
Теперь мой вопрос: если кто-то хочет быть злонамеренным, он может напрямую опубликовать сценарий моего сервера, используя внутреннюю память, пропускную способность и, возможно, переполнение буфера. Есть ли способ предотвратить, сколько информации поступает от пользователя?
Я пробовал это перед строкой чтения, но я не совсем уверен, что это правильный способ сделать это. Есть идеи? Спасибо.
if ($ENV{'CONTENT_LENGTH'} > 100000) {
#then return some error message / exit
}
РЕДАКТИРОВАТЬ И РЕШЕНИЕ ДЛЯ МОЕЙ ПРОБЛЕМЫ:
use CGI qw/:standard/;
use CGI::Carp 'fatalsToBrowser';
$CGI::POST_MAX=1024 * 100; # max 100K posts
#$CGI::DISABLE_UPLOADS = 1; # no uploads
$uploaded_file = param( 'POSTDATA' );
if (!$uploaded_file && cgi_error()) {
print header(-status=>cgi_error());
exit 0;
}
Я хочу поблагодарить всех вас за ваши быстрые ответы (положительные отзывы для всех), но я должен дать правильный ответ первому человеку, который разместил правильную ссылку, несмотря на то, что он не приложил никаких усилий для написания чего-либо. Я думаю, это только честно? Что вы, ребята, думаете, оставьте комментарий ниже.