#python #database #postgresql #security
#python #База данных #postgresql #Безопасность
Вопрос:
Итак, у меня есть веб-приложение flask, которое выполняет основные операции с базой данных. Я использую базу данных PostgreSQL. И я использую psycopg2 для доступа к ней. вот фрагмент кода для извлечения моих данных.
import psycopg2
connection = psycopg2.connect(user="sysadmin",
password="mypass",
host="127.0.0.1",
port="5432",
database="myData")
Это не мой точный код, но он продемонстрирует мой вопрос. Как вы могли видеть, пароль и имя пользователя моей базы данных видны любому, у кого есть доступ к моему серверному коду. Но я не считаю, что запись пароля базы данных внутри программы является безопасным способом! итак, я надеялся, что кто-нибудь может указать какие-либо другие способы. Как это делают профессиональные веб-приложения, такие как Google и Facebook?
Комментарии:
1. Это зависит от среды, в которой вы работаете, но обычно они используют какую-либо службу управления ключами. Google Cloud специально имеет cloud.google.com/kms
Ответ №1:
Одна вещь, которую вы могли бы рассмотреть, — это переменные среды, которые позволили бы вам определять секретные значения в их среде, а не в самом коде. В python вы можете получить доступ к среде с помощью os.environ.get("variablename")
; полное руководство по работе с ними на python доступно здесь. Именно так многие службы решают управлять секретами, и это используется по умолчанию для таких служб, как heroku.
Ответ №2:
Недавно я изучал flask, и у меня возник этот вопрос. В итоге я использовал файл «secrets» в формате json для хранения информации для входа, а также секретных ключей.
secretfiles.json
{
"web": {
"app_id": "randomlongid",
"app_secret": "randomlongkey",
"user_name": "ausername",
"user_pw": "randompassword"
}
}
Затем я импортировал в свое приложение.
import json
import psycopg2
MY_PASS = json.loads(open('secretfiles.json', 'r').read())['web']['user_pw']
connection = psycopg2.connect(user="sysadmin",
password=MY_PASS,
host="127.0.0.1",
port="5432",
database="myData")
Затем я бы добавил имя файла или просто *.json
в свой .gitignore
Однако я искал хорошее объяснение использования переменных среды, подобных той, на которую только что ссылался infobiac, поэтому я, скорее всего, буду использовать этот метод в будущем.