Как защитить исходный код Perl с помощью шифрования - PullRequest
0 голосов
/ 11 декабря 2018

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

Как лучше всего защитить Perl-код?У нас очень минимальное понимание Perl и CGI, но нам нужно решение этой проблемы, поскольку это создает угрозу безопасности.

Мы ищем решения для шифрования / обфускации, мы читаем о Filter :: Crypto ::Расшифровать, но не знаю, как его применить.Мы также наткнулись на этот сайт (http://enscryption.com/), но мы довольно скептически относимся к нему.

Мы будем признательны за несколько простых указаний о том, что делать с шагами!:)

Спасибо!

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Из FAQ по Perl :

Как скрыть исходный текст моей Perl-программы?

Удалить.:-) Серьезно, существует ряд (в основном неудовлетворительных) решений с различными уровнями «безопасности».

Прежде всего, однако, вы не можете отозвать разрешение на чтение, потому что исходный код долженбыть читаемым, чтобы быть скомпилированным и интерпретированным.(Это не означает, что источник сценария CGI может быть прочитан людьми в Интернете, но только людьми, имеющими доступ к файловой системе.) Поэтому вы должны оставить разрешения на уровне 0755, дружественном для общества.

Некоторые люди считают это проблемой безопасности.Если ваша программа делает небезопасные вещи и полагается на людей, не знающих, как использовать эти уязвимости, она не является безопасной.Часто кто-то может определить небезопасные вещи и использовать их, не просматривая источник.Безопасность через неясность, имя, скрывающее ваши ошибки вместо того, чтобы исправлять их, на самом деле мало защищает.

Вы можете попробовать использовать шифрование с помощью исходных фильтров (начиная с Perl 5.8 Filter :: Simple и Filter :: Util:: Модули вызова включены в стандартный дистрибутив), но любой приличный программист сможет его расшифровать.Вы можете попробовать использовать компилятор и интерпретатор байт-кода, описанный ниже в perlfaq3, но любопытный может все же его декомпилировать.Вы можете попробовать использовать компилятор нативного кода, описанный ниже, но взломщики могут его разобрать.Они создают различные степени сложности для людей, желающих получить ваш код, но никто не может окончательно его скрыть (верно для каждого языка, не только для Perl).

Очень легко восстановить источник программ на Perl.Вы просто передаёте программу интерпретатору perl и используете модули в иерархии B ::.Модуль B :: Deparse должен быть в состоянии победить большинство попыток скрыть источник.Опять же, это не уникально для Perl.

Если вы беспокоитесь о людях, получающих выгоду от вашего кода, то суть в том, что только ограничительная лицензия обеспечит вам юридическую защиту.Лицензируйте свое программное обеспечение и сопровождайте его такими угрожающими заявлениями, как «Это неопубликованное проприетарное программное обеспечение XYZ Corp. Ваш доступ к нему не дает вам разрешения использовать его, бла-бла-бла».Разумеется, мы не юристы, поэтому вам следует обратиться к юристу, если вы хотите быть уверены, что формулировка вашей лицензии будет подтверждена в суде.

0 голосов
/ 11 декабря 2018

Вы не можете защитить код. Как сказал Икегами , для запуска кода вам необходимо расшифровать код.

Но вы можете защитить конфиденциальную информацию.Самое простое, что нужно сделать, это поместить его в переменные окружения и убедиться, что эти переменные установлены при запуске программы.

Например, если у вас есть ...

my $dbpassword = "sekret";

Вы бы изменилиэто к ...

my $dbpassword = $ENV{DBPASSWORD};

И убедитесь, что переменная окружения DBPASSWORD установлена ​​на sekret при запуске программы.Это одновременно выводит секреты из исходного кода и делает код более гибким.Вы можете хранить секреты в одном месте, облегчая управление ими.Это гарантирует, что эти секреты никогда не будут храниться в открытом виде на диске.

Аналогично, если ваши секреты находятся в файле, вы можете зашифровать этот файл.Затем код Perl расшифровывает файл с помощью ключа, хранящегося в переменной среды.Опять же, секреты никогда не хранятся на диске в открытом виде.Это похоже на Rails Encrypted Credentials .

Способ безопасного хранения этих секретов и установки этих переменных среды зависит от настроек вашего сервера.После того, как проблема хранения секретов удалена из старого Perl-кода, у вас появляется много вариантов.

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