Как сделать логин и пароль в python
Если бы я должен был создать логин 'a' и пароль 'b', а затем создать логин 'b' и пароль 'a', он войдет в систему, если я попытаюсь войти в систему с логином 'a' и password ' а". Он просто проверяет, существуют ли эти символы где-то в словаре, но не если они являются парой.
Любые предложения по исправлению этого вопроса?
Edit
Теперь, когда это работает, я пытаюсь разделить приложение на три функции для удобства чтения. Он работает, за исключением того, что я получаю бесконечный цикл.
Любые предложения, почему?
Сейчас вы проверяете, соответствует ли данный пароль passw любым клавишам в users (не справа). Вам нужно узнать, соответствует ли введенный пароль данному конкретному паролю пользователя. Поскольку вы уже проверили, существует ли имя пользователя в ключах словаря, вам не нужно снова проверять, поэтому попробуйте что-то вроде:
Для вашего обновленного кода я собираюсь предположить, что "бесконечный цикл" означает, что вы не можете использовать q для выхода из программы. Это потому, что, когда вы находитесь внутри displayMenu , вы сохраняете ввод пользователя в локальной переменной с именем status . Эта локальная переменная не относится к тому же status , где вы проверяете,
Другими словами, вы используете переменную status в двух разных областях (изменение внутренней области не меняет внешний вид).
И добавив оператор return в конце displayMenu , например,
Таким образом вы сохраняете новое значение status из локальной области displayMenu в глобальную область вашего script, чтобы цикл while мог работать правильно.
Другим способом было бы добавить эту строку в начало displayMenu ,
Это говорит Python, что status внутри displayMenu относится к глобальной переменной status , а не к локальной локальной области.
Я хотел бы создать систему входа с использованием python.
Как сейчас, у меня есть это:
Это позволит вам создать имя пользователя и пароль и сохранить их в списке.
Я добавил, что оператор if проверяет список, чтобы увидеть, существует ли пользователь (но я не думаю, что это работает)
Я просто хочу немного узнать, как получить все это в цикле: например, вы выбираете, есть ли у вас логин или нет, после входа в систему у вас есть возможность создать другой, и он будет проверять, чтобы увидеть если этот пользователь уже существует.
Это, вероятно, не тот ответ, которого вы ожидали, но здесь он идет: НЕ передумайте изобретать колесо.
Использовать существующие инструменты как можно больше и сосредоточиться на функциональных возможностях, которые вы не можете получить бесплатно.
Пойдем шаг за шагом:
Во-первых, проверка того, существует ли пользователь, всегда будет говорить вам об этом, потому что вы добавляете пользователя, , затем проверяете, существует ли он. Итак, выражение if, которое вы написали, в порядке, но положил его перед store_user.append :
Во-вторых, условие, которое вы написали для while 1 == 1: , бесполезно (но все же правильно), вы можете сделать while 1 (потому что 1 оценивается как True) или даже лучше while True: .
В-третьих, проверка имени пользователя и пароля проверяет только последнего пользователя и пароль. Если вы использовали userguess in store_user и то же самое для пароля, вы не получите ожидаемого результата. Итак, вам нужно использовать словари вместо списков. С их помощью вы можете назначить ключ . В вашем случае пользователь вводит пароль, поэтому у вас будет:
Подробнее о словарях.
Затем вы можете сохранить каждую "логическую" процедуру в функции, чтобы сделать ваш код более читаемым и повторно использовать. Например:
(не говоря уже об использовании классов и т.д.)
Сделайте то же самое для части пароля проверки, а затем вы можете использовать цикл, который вы сделали с небольшими изменениями, чтобы делать то, что вы ожидаете.
Я пишу небольшой скрипт на Python, который будет периодически извлекать информацию из стороннего сервиса, используя комбинацию имени пользователя и пароля. Мне не нужно создавать что-то, что будет на 100% пуленепробиваемым (даже существует ли оно на 100%?), Но я хотел бы задействовать хорошую меру безопасности, чтобы, по крайней мере, кому-то понадобилось бы много времени, чтобы ее взломать.
Этот сценарий не имеет графического интерфейса и будет периодически запускаться cron , поэтому ввод пароля при каждом запуске для расшифровки не будет работать, и мне придется хранить имя пользователя и пароль в любом из них. зашифрованный файл или зашифрованный в базе данных SQLite, что было бы предпочтительнее, так как я все равно буду использовать SQLite, и мне может понадобится изменить пароль в какой-то момент. Кроме того, я, вероятно, оберну всю программу в EXE-файл, поскольку на данный момент она предназначена исключительно для Windows.
Как можно безопасно хранить комбинацию имени пользователя и пароля для периодического использования с помощью задания cron ?
Я рекомендую стратегию, аналогичную ssh-agent. Если вы не можете использовать ssh-agent напрямую, вы можете реализовать что-то подобное, чтобы ваш пароль оставался только в оперативной памяти. В задании cron могли быть настроены учетные данные для получения действительного пароля от агента при каждом его запуске, однократного использования и немедленной отмены ссылки с помощью оператора del .
Администратору по-прежнему необходимо вводить пароль для запуска ssh-agent во время загрузки или чего-либо еще, но это разумный компромисс, который позволяет избежать сохранения простого текста в любом месте на диске.
Я использовал криптографию, потому что у меня были проблемы с установкой (компиляцией) других часто упоминаемых библиотек в моя система. (Win7 x64, Python 3.5)
библиотека ключей Python интегрируется с CryptProtectData API в Windows (вместе с соответствующими API на Mac и Linux), который шифрует данные с учетными данными пользователя.
Использование, если вы хотите сохранить имя пользователя в связке ключей:
Позже, чтобы получить информацию о связке ключей
Элементы шифруются с использованием учетных данных операционной системы пользователя, поэтому другие приложения, работающие в вашей учетной записи, смогут получить доступ к паролю.
Чтобы немного скрыть эту уязвимость, вы могли бы каким-то образом зашифровать / запутать пароль перед его сохранением в связке ключей. Конечно, любой, кто нацелился на ваш сценарий, мог бы просто посмотреть на источник и выяснить, как дешифровать / разблокировать пароль, но вы, по крайней мере, не допустите, чтобы какое-то приложение пылесосило все пароли в хранилище и получало ваши. ,
Я думаю, что лучшее, что вы можете сделать, это защитить файл скрипта и систему, на которой он работает.
В основном сделайте следующее:
- Использовать разрешения файловой системы (chmod 400)
- Надежный пароль для учетной записи владельца в системе
- Уменьшить возможность взлома системы (брандмауэр, отключить ненужные службы и т. Д.)
- Удалите административные / root / sudo привилегии для тех, кому это не нужно
Нет смысла пытаться зашифровать пароль: у человека, от которого вы пытаетесь его скрыть, есть скрипт Python, в котором будет код для его расшифровки. Самый быстрый способ получить пароль - добавить оператор печати в скрипт Python непосредственно перед тем, как он использует пароль со сторонним сервисом.
Поэтому сохраните пароль в виде строки в скрипте и закодируйте его в base64, чтобы просто прочитать файл, а затем назвать его днем.
Насколько я понимаю, это будет хранить данные, так что они могут быть доступны только с учетной записи, используемой для их хранения. если вы хотите редактировать данные, вы можете сделать это, написав код для извлечения, изменения и сохранения значения.
Существует несколько вариантов хранения паролей и других секретов, которые должна использовать программа Python, особенно программа, которая должна работать в фоновом режиме, где она не может просто попросить пользователя ввести пароль.
Проблемы, которых следует избегать:
- Проверка пароля в системе контроля версий, где его могут увидеть другие разработчики или даже публика.
- Другие пользователи на том же сервере читают пароль из файла конфигурации или исходного кода.
- Наличие пароля в исходном файле, где другие могут видеть его через плечо, пока вы редактируете его.
Вариант 1: SSH
Это не всегда вариант, но, вероятно, лучший. Ваш закрытый ключ никогда не передается по сети, SSH просто выполняет математические вычисления, чтобы доказать, что у вас есть правильный ключ.
Чтобы это работало, вам нужно следующее:
Вариант 2: переменные среды
Вот пример, который извлекает сервер, имя пользователя и пароль из переменных среды.
Посмотрите, как установить переменные среды в вашей операционной системе, и подумайте о запуске службы под собственной учетной записью. Таким образом, у вас нет конфиденциальных данных в переменных среды, когда вы запускаете программы под своей учетной записью. Когда вы настраиваете эти переменные среды, будьте особенно внимательны, чтобы другие пользователи не могли их прочитать. Проверьте права доступа к файлу, например. Конечно, любой пользователь с правами root сможет их прочитать, но с этим ничего не поделаешь.
Вариант 3: файлы конфигурации
Это очень похоже на переменные среды, но вы читаете секреты из текстового файла. Я все еще нахожу переменные среды более гибкими для таких вещей, как инструменты развертывания и серверы непрерывной интеграции. Если вы решите использовать файл конфигурации, Python поддерживает несколько форматов в стандартной библиотеке, например JSON, INI, netrc и XML. Вы также можете найти внешние пакеты, такие как PyYAML и TOML. Лично я считаю JSON и YAML наиболее простым в использовании, а YAML позволяет комментировать.
Три вещи, которые следует учитывать при использовании файлов конфигурации:
- Где файл? Возможно расположение по умолчанию, например ~/.my_app , и параметр командной строки для использования другого расположения.
- Убедитесь, что другие пользователи не могут прочитать файл.
- Очевидно, не фиксируйте файл конфигурации в исходном коде. Возможно, вы захотите зафиксировать шаблон, который пользователи могут скопировать в свой домашний каталог.
Вариант 4: модуль Python
Некоторые проекты просто помещают свои секреты прямо в модуль Python.
Затем импортируйте этот модуль, чтобы получить значения.
Одним из проектов, использующих эту технику, является Django. Очевидно, что вы не должны фиксировать settings.py в системе контроля версий, хотя вы можете захотеть зафиксировать файл с именем settings_template.py , который пользователи могут копировать и изменять.
Я вижу несколько проблем с этой техникой:
- Разработчики могут случайно передать файл в систему контроля версий. Добавление его в .gitignore снижает этот риск.
- Часть вашего кода не находится под контролем исходного кода. Если вы дисциплинированы и ввели здесь только строки и цифры, это не будет проблемой. Если вы начнете писать здесь классы фильтров журналирования, остановитесь!
Если ваш проект уже использует эту технику, легко перейти к переменным среды. Просто переместите все значения параметров в переменные среды и измените модуль Python для чтения из этих переменных среды.
Посмотрев ответы на этот и другие вопросы, я собрал некоторый код, используя несколько предложенных методов для шифрования и скрытия секретных данных. Этот код специально предназначен для случаев, когда сценарий должен запускаться без вмешательства пользователя (если пользователь запускает его вручную, лучше всего, чтобы он вставил пароль и оставил его в памяти только в соответствии с ответом на этот вопрос). Этот метод не является сверхбезопасным; По сути, скрипт может получить доступ к секретной информации, поэтому любой, кто имеет полный системный доступ, имеет скрипт и связанные с ним файлы и может получить к ним доступ. То, что это делает, идентифицирует данные от случайной проверки и оставляет файлы данных в безопасности, если они проверяются по отдельности или вместе без сценария.
Моя мотивация для этого - проект, который опрашивает некоторые из моих банковских счетов для мониторинга транзакций - мне нужно, чтобы он работал в фоновом режиме без повторного ввода паролей каждую минуту или две.
Просто вставьте этот код в начало вашего скрипта, измените saltSeed, а затем используйте store () retrieve () и require () в своем коде по мере необходимости:
Безопасность этого метода была бы значительно улучшена, если бы для секретных файлов были установлены разрешения os, чтобы позволить только самому сценарию их читать, и если сам сценарий был скомпилирован и помечен как исполняемый (не читаемый). Некоторые из них могут быть автоматизированы, но я не беспокоился. Вероятно, потребуется настроить пользователя для сценария и запустить сценарий от имени этого пользователя (и установить право собственности на файлы сценария для этого пользователя).
Я буду рад любым предложениям, критике или другим уязвимым местам, о которых может подумать каждый. Я довольно новичок в написании криптографического кода, поэтому то, что я сделал, почти наверняка можно улучшить.
Я разрабатываю демон резервного копирования, который будет работать в фоновом режиме. Демон полагается на duplicity резервное программное обеспечение, которое при резервном копировании требует ключа шифрования. Я не могу запросить пароль через консоль, потому что, очевидно, у демона нет доступа к такому.
Как я могу легко создать приглашение, которое просит пользователя ввести пароль, и возвращает его приложению (через переменную в Python)? Я использую Python 2.7.
потому что вы попросили простой (Python 2.7):
потому что не все хотят использовать TK, вот скрипт, использующий PyQt:
и, потому что вы обычно не просто спрашиваете у пользователя пароль только для этого:
и соответствующая функция bash:
решены вопросы области @pycoder112358 post:
расширение ответа Диего с некоторым минимальным домашним хозяйством (без этого я получал аварии в изобилии, пытаясь использовать его красиво краткий пример):
Это будет хорошо работать с программой, которая в противном случае просто терминал / консольное приложение.
Читайте также: