Python
 Computer >> コンピューター >  >> プログラミング >> Python

【Python】getpass()とgetuser()でパスワードをエコーなしで安全に入力する方法

Pythonで実行前にパスワード保護をかけたいプログラムを作成する際に便利なのが、標準ライブラリのgetpassモジュールです。getpass()やgetuser()といった関数を使うことで、パスワード保護やユーザー情報の取得などを簡単に実現できます。

本記事では、パスワード入力時に画面へ文字を表示しない(エコーバックしない)基本的な方法から、独自のプロンプトを表示する応用例まで、複数のパターンをコード付きで解説します。

1. 基本的な使い方:プロンプトを表示してパスワードを受け付ける

以下のコードは「logon.py」というファイル名で保存します。getpass()関数はデフォルトで「Password:」というプロンプトを表示し、ユーザーがEnterキーを押すまでの入力を読み取ります。このとき、入力した文字は画面に一切表示されないため、肩越しに覗かれるリスクを防げます。

サンプルコード

import getpass

try:
    pwd = getpass.getpass()
except Exception as err:
    print('Error Occured : ', err)
else:
    print('Password entered :', pwd)

実行結果

$ python logon.py
Password:
Password entered: abracadbra

※ 入力中は文字が非表示になりますが、上記の例では動作確認のため入力値を後から出力しています。実際の運用では、パスワードをそのまま表示したりログに残したりしないよう注意してください。

2. セキュリティ質問をプロンプトに使う

getpass()関数にはprompt引数を渡せるため、任意のメッセージをプロンプトとして表示できます。たとえばセキュリティ質問を表示し、その答えを合言葉のように扱うことも可能です。質問形式にすることで、ユーザーがパスワードを思い出しやすくなるというメリットもあります。

サンプルコード

import getpass

pwd = getpass.getpass(prompt='What is your favorite colour?')
if pwd == 'Crimson':
    print('You are in!')
else:
    print('Try Again')

実行結果

$ python logon.py
What is your favorite colour?
You are in!

3. ログイン名を取得して表示する

スクリプトを実行しているユーザーのログイン名を知りたい場合は、getuser()関数を使用します。getuser()はOS環境から現在のユーザー名を自動的に取得して返します。取得したユーザー名をプロンプトに組み込めば、より使いやすい認証フローを実現できます。

サンプルコード

import getpass

user = getpass.getuser()
while True:
    pwd = getpass.getpass(prompt=f"User Name : {user}\nPassword : ")
    if pwd == 'Crimson':
        print("You are in!")
        break
    else:
        print("The password you entered is wrong.")

実行結果

User Name : user1
Password :
You are in!

まとめ

getpassモジュールを活用すれば、入力内容を画面に残さず安全にパスワードを受け付けられます。ポイントを整理すると次の通りです。

  • getpass():prompt引数で指定したメッセージ(未指定なら「Password:」)を表示し、エコーなしで入力を受け取る
  • getuser():OSから現在のログインユーザー名を取得する
  • 端末を利用できない環境(一部のIDEなど)では警告が表示され、入力が平文で見える場合があるため注意
  1. Pythonで学ぶ相関と回帰分析の基礎|Seabornを使ったデータ分析入門

    相関(Correlation)とは、2つのデータセット間に存在する依存関係を含む統計的な関係性を指します。一方、線形回帰(Linear Regression)は、従属変数と1つ以上の独立変数の間の関係を直線的なアプローチで捉える手法です。独立変数が1つの場合は「単回帰」、複数ある場合は「重回帰」と呼ばれます。相関とは何か依存現象の身近な例としては、親と子の身体的特徴(外見)の類似性や、商品の価格と供給量の関係などが挙げられます。価格が上がれば供給量が増える、といった具合に、変数同士が互いに影響し合う様子を統計的に表したものが相関です。本記事では、Pythonの可視化ライブラリ「Seaborn」

  2. Pythonのgetpassモジュールとは?パスワード入力とユーザー名取得の基本を解説

    Pythonの標準ライブラリには、ターミナル上で動作するアプリケーションにおいて、ユーザーの認証情報を検証してから処理を実行したい場合に役立つgetpassモジュールが用意されています。このモジュールには主に2つの関数が定義されており、セキュリティを意識したコマンドラインツールの開発に欠かせない存在です。 getpass() 関数:パスワードを安全に入力する getpass()関数は、ユーザーにパスワードの入力を促すための関数です。デフォルトでは、ターミナルに入力されたキーは画面に表示(エコー)されないため、第三者にパスワードを盗み見られる心配がありません。 また、プロンプトとして表示される