質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
phpPgAdmin

phpPgAdminは、PHPで作成された複数のPostgreSQLデータベースをブラウザから簡単に管理・操作できるツール。テーブルの作成や参照を始め、データのバックアップやリストアといった操作が可能になります。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

964閲覧

pythonで、postgreSQLにアクセスするパスワードをバレないようにしたい

stakezo

総合スコア43

phpPgAdmin

phpPgAdminは、PHPで作成された複数のPostgreSQLデータベースをブラウザから簡単に管理・操作できるツール。テーブルの作成や参照を始め、データのバックアップやリストアといった操作が可能になります。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2022/10/06 06:08

編集2022/10/07 10:42

前提

よろしくお願いします。
質問の内容は「パスワードが、ばれないようにできないか」です。

私は、exe化したpythonアプリと、phpのWebページを用いて

[pythonのexe化アプリ] <--> [サーバ(postgreSQL含む)] <--> [Webページ(php)]

このように、連携させたいと思っています。
python側も、php側も、同じPostgreSQLのサーバにアクセスします。

このうち、php側からSQLサーバにアクセスするときは、phpのソース内にSQLのパスワードを入れるので、ユーザにパスワードがバレることは無いと思っているのですが、
exe化したpythonアプリ経由の場合は、以下の点で使用者の解析でパスワードがバレないかと心配しています。

問題におもっているところ

[1]・exe化したアプリをソースレベルに戻すツールの使用
[2]・ネットワーク信号の傍受
[3]・jsonを使っても[1][2]に効果はない?

[1] は、解析を難しくするツールを入れて解決できると思っています。

[2] が、不安に思っています。知識がないもので、単純に、平文でサーバーにアクセスすると盗まるのかな、と思っています。
普通プログラミングでパスワードを入れる時、どうするんでしょうか?、C/C++ のようなコンパイルしたexeは、バイナリエディタとかで見るとパスワードは見れちゃった経験があるので、考えが浮かばず困っています。

[3]のjsonが解決法かと思ったのですが、ソース内自体には無くてもexe化した[1]には結局情報が入っているだろうし、[2]のネットワーク信号にはパスワードが平文で乗る気がします。

ソースの例

connector =
psycopg2.connect('postgresql://{user}:{password}@{host}:{port}/{dbname}'.format(
user = "postgres", #ユーザ
password = "pass123", #パスワード
host = 123.45.67.89
port = "5432", #ポート
dbname = "dbhoge") #データベース名
)

このようなパスワードがわからないようにするには、どのようなテクニックを皆さん使われているのでしょうか?ご教授よろしくお願いします!

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
==2022/10/07 16:45:22 追記=======================
私の返信が、回答者様へ通知がいかない方法でした。無反応のようになってしまい申し訳ありません。

stakezo 2022/10/06 16:53
たくさんの回答ありがとうございます。現在回答を元に調べている段階です。
プログラム内に、パスワードを入れることは不正解である。ということに気づかせていただきました。

次に、するべきは、「インターネットに対して待ち受けるような形でDBサーバを立てる」を辞める
「インターネットに対して」というのは、
ユーザーPCから、グローバルネットワークを通じて、サーバのデータベースにアクセス、これがダメだ、ということでしょうか。

~予想~
まだ、調べている段階なのですが、
ユーザPCのPythonプログラムが、サーバのPythonとかの待ち受けのプログラムと連携して、そのプログラムがローカル内のpostgreSQL にアクセスする、とかそんな感じなのかな。 もしかしたらそれがWebAPIなのかな。

と考えながら現在調べています。
======================================

この返信のあと、exe内にパスワードを入れない方向でずっと考え
「WebAPI、これは勉強しなければ」と課題にしました。そして今の技術でできる
「phpで、問い合わせるWebページをつくり、結果を受け取る」を作っている最中です。

pythonのexe化アプリから、

https://aaa.com/bbb?hoge=123456789&fuga=f034je9jD93j . . .

このような感じで問い合わせ、URLのphpが、データベースにアクセス。結果をpythonのexe化アプリが受け取る。
(※postgreSQL と、 php は同じサーバです)
という構想で作っています。これだと、データベースのアクセスがサーバ内で完結してるからセキュリティ的に大丈夫だと思っています。

もし、回答者様がまだこの質問を気にかけてくださって、ここに気づいてくださるなら、これは一般的なのか、もっと良いやり方があるのか教えていただきたいです。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

stakezo

2022/10/06 07:53 編集

たくさんの回答ありがとうございます。現在回答を元に調べている段階です。 プログラム内に、パスワードを入れることは不正解である。ということに気づかせていただきました。 次に、するべきは、「インターネットに対して待ち受けるような形でDBサーバを立てる」を辞める 「インターネットに対して」というのは、 ユーザーPCから、グローバルネットワークを通じて、サーバのデータベースにアクセス、これがダメだ、ということでしょうか。 ~予想~ まだ、調べている段階なのですが、 ユーザPCのPythonプログラムが、サーバのPythonとかの待ち受けのプログラムと連携して、そのプログラムがローカル内のpostgreSQL にアクセスする、とかそんな感じなのかな。 もしかしたらそれがWebAPIなのかな。 と考えながら現在調べています。
m.ts10806

2022/10/06 19:40

回答していたとしても、こちらへのコメントではこちらにコメントや修正依頼をしてないと通知が来ないようなので(不便・・) 質問を編集して追記してください。
stakezo

2022/10/07 07:42

申し訳ありませんでした! 今後回答者様への通知を考え気をつけます!
guest

回答3

0

ベストアンサー

DBに対する処理は全てWebAPIに任せます。

※DB接続情報は漏れませんが、URL分かれば誰でも接続化になってしまうと不正なアクセスを受けてしまう可能性があるので、
許可したユーザのみアクセスできるようにアクセストークンを発行してAPI側で認証させるなどの検討は必要です。

投稿2022/10/06 06:13

編集2022/10/06 19:38
m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kikukiku

2022/10/06 07:21

WebAPIに対してアクセス制限はどうするのかは別途考えないとならないと思います。 ・アクセス先を制限するとか ・アクセストークンのようなものを利用するとか ・などなど
m.ts10806

2022/10/06 19:35 編集

ご指摘されたユーザ(と言っても私の回答のほとんどに1人で無言で指摘されている嫌がらせ目的が疑われるユーザですが) とは別の方で安心しました。リアクションありがとうございます。 補足ありがとうございます。 そうですね。ちょっと追記しておきます。
guest

0

単刀直入にいえば、その構成でpythonアプリにパスワードが入っているとして、そのパスワードを完全に隠すことは不可能です。
1については、exe化してあったとしても中を覗く方法はあるし、パスワードが暗号化してあったとしても、その複合化処理はアプリに入れざるを得ないのです。
2のネットワーク信号の傍受 も当然可能ですね。
3については何を意図しているのか不明です。

結局他の方が言っているように「プログラミングでパスワードを入れる」というようなことはしないというのが正解です。

投稿2022/10/06 07:04

編集2022/10/07 10:45
TakaiY

総合スコア12765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

そもそも論として、インターネットに対して待ち受けるような形でDBサーバを立てるべきではありません。

ゆえに、エンドユーザーに配布するPython製のコード内にDB接続のパスワードが入っているのは設計レベルで不適切です。

投稿2022/10/06 06:31

maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問