Является ли простой текстовый пароль в CGI-скрипте дырой в безопасности? - PullRequest
6 голосов
/ 01 декабря 2010

Я читал, что с вашим веб-сервером могут возникнуть проблемы, которые могут привести к отображению PHP-скриптов в виде простых текстовых файлов в веб-браузере;следовательно, я переместил большинство моих PHP-скриптов в каталог за пределами веб-корня.Теперь мне было интересно, может ли то же самое случиться со сценариями CGI в моем cgi-bin.

Моя главная проблема - один сценарий, который содержит имя пользователя и пароль для моей базы данных MySQL.Если это возможная дыра в безопасности (по крайней мере, в отношении содержимого базы данных), есть ли способ поместить конфиденциальные данные в другое место и получить их оттуда (например, сохранить их в файле в другом каталоге и прочитатьэто из того файла, например)?Мои сценарии написаны на Perl.

Ответы [ 6 ]

10 голосов
/ 01 декабря 2010

Я читал, что на вашем веб-сервере могут возникнуть проблемы, которые могут привести к отображению PHP-скриптов в виде текстовых файлов в веб-браузере;следовательно, я переместил большинство моих PHP-скриптов в каталог за пределами веб-корня.Теперь мне было интересно, может ли то же самое случиться со скриптами CGI в моем cgi-bin.

Да.Если что-то пойдет не так, что программы будут обслуживаться, а не выполняться, то любой их контент будет открыт.Это точно такая же проблема, как и в PHP (за исключением того, что, как правило, каталоги cgi-bin обычно конфигурируются (т.е. имеют псевдоним для каталога вне корневого веб-каталога), проблемы немного сложнее возникают).

Моя главная задача - один скрипт, который содержит имя пользователя и пароль для моей базы данных MySQL.Если это возможная дыра в безопасности (по крайней мере, в отношении содержимого базы данных), есть ли способ поместить конфиденциальные данные в другое место и получить их оттуда (например, сохранить их в файле в другом каталоге и прочитатьэто из того файла, например)?

Да.Именно это, просто убедитесь, что каталог находится вне webroot.

Для дополнительной безопасности убедитесь, что база данных принимает учетные данные только для соединений с минимального набора хостов, которым необходим доступ к нему.например, если база данных находится на том же сервере, что и веб-сервер, тогда разрешите работать только учетным данным для localhost.В этом случае хорошей идеей будет заставить базу данных прослушивать только локальный сетевой интерфейс.

Мои сценарии написаны на Perl, кстати.

Я быдля этого рассмотрим использование одного из модулей Config :: *.

3 голосов
/ 25 января 2012

Одна проблема, о которой стоит упомянуть, относится к общему хостингу.

Если вы находитесь на хосте, доступном для других пользователей, может быть невозможно скрыть пароль от них.Это зависит от деталей конфигурации для ОС и веб-сервера.

Например, в Linux часто встречается конфигурация Apache, при которой пользователь, предлагающий веб-сайт, может сделать файлы доступными для чтения или записи только для пользователя.Пользователь веб-сервера должен сделать их доступными для чтения / записи для всех пользователей.

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

Существуют контрмеры против этого, но они усложняют работу пользователей, поэтому многие хостеры их не реализуют.

2 голосов
/ 02 декабря 2010

Определенно не очень хорошая идея жестко кодировать пароль в скрипте, если вы можете его избежать. К счастью, и Postgres, и MySQL поддерживают загрузку учетных данных БД из файла. Для Postgres вы используете ~ / .pgpass, а для MySQL я считаю, что это ~ / .my.cnf. В любом случае вы должны настроить разрешения так, чтобы только пользователь, выполняющий сценарий, имел разрешение на чтение файла. Преимущество этого подхода заключается в том, что вам не нужно писать код для чтения файла - клиентская библиотека БД делает это автоматически.

1 голос
/ 01 декабря 2010

Это определенно проблема безопасности. Вы должны хранить зашифрованный пароль в отдельном файле и убедиться, что только ваше приложение имеет к нему доступ.

0 голосов
/ 21 апреля 2013

Вы уже получили лучшие ответы, чем я могу дать, но в качестве примечания:

Очень плохо хранить пароли в виде открытого текста, точка.

Точно так же очень плохо перезаписывать или удалять файлы, не спрашивая разрешения. Если вы это сделаете, это в конечном итоге укусит вас или вашего клиента в задницу.

0 голосов
/ 01 декабря 2010

Если вы используете каталог, настроенный как cgi-bin, файл не может быть отображен, кроме ошибки с настройкой Apache. Если вы используете Perl-программы вне каталогов cgi-bin, но внутри корня сайта, это может произойти.

Кроме того, вы можете настроить БД на прием соединений только от локального сокета, поэтому знание пароля БД бесполезно.

...