[Moscow.pm] Безопасность Perl

Vladimir Lettiev thecrux на gmail.com
Ср Дек 30 05:08:33 PST 2015


On Wed, Dec 30, 2015 at 06:06:35PM +0600, Anatoly Y wrote:
> какие инсталяции? CGI.pm ? который выпилили из коре. О котом Sawyer ещё
> года два или три назад говорил очень звучно на конфе )
> Или про то, что он утверждает будто разработчики хэши считают безопасными,
> а скаляры нет. Ну что за бред?)
> Он просто клоун)

В защиту CGI.pm можно только сказать, что, на самом деле, всё давно
задокументировано.
 
В 1999 году вышел CGI 2.47, в котором появился метод upload специально для
того, чтобы гарантировано получить файловый дескриптор. И в документации
было сказано:
 
> However, there are problems with the dual nature of the upload fields.
> If you use strict, then Perl will complain when you try to use a string
> as a filehandle. You can get around this by placing the file reading
> code in a block containing the no strict pragma. More seriously, it is
> possible for the remote user to type garbage into the upload field, in
> which case what you get from param() is not a filehandle at all, but a
> string.
 
> To be safe, use the upload() function (new in version 2.47). When called
> with the name of an upload field, upload() returns a filehandle, or undef
> if the parameter is not a valid filehandle.
 
Т.е. людям явно сказали не использовать param для чтения файлов в 1999 и
предупредили о его двойственности и побочных эффектах.
 
В 2009 явно выделили этот пункт, что param это древний способ для работы с
файлами:
 
https://metacpan.org/pod/release/LDS/CGI.pm-3.48/lib/CGI.pm#Older-ways-to-process-file-uploads
 
Можно было убрать возможность для param возвращать дескриптор, но это бы
ударило по обратной совместимости, которую разработчики вынужденны
поддерживать.

В докладе упоминается upload - но только для проверки, что отправляется файл.
В <> запихивается уже результат param.

-- 
Vladimir Lettiev aka crux ✉ theCrux на gmail.com


Подробная информация о списке рассылки Moscow-pm