2013-01-25 12 views
5

私はAPIとインターフェイスするPythonスクリプトを持っています。スクリプトはPHPページから開始されます。私は両方のスクリプトを書いたので、どちらかでコードを適切に変更することができます。プロセスの開始、psからの引数の非表示

Pythonスクリプトでは、APIとのインターフェイスにはユーザー名とパスワードが必要です。私の最初の傾斜は、CLIの引数としてPythonにそれらを渡すことです:

<?php 
exec('python someScript.py AzureDiamond hunter2'); 
?> 

しかし、誰もが、その後psを経由して資格情報を見ることができます:私は検討しています

$ ps | grep someScript 
1000  23295 2.0 0.2 116852 9252 pts/0 S+ 15:47 0:00 python someScript.py AzureDiamond hunter2 

選択肢がにデータを書き込むことがありますテキストファイルまたはsqliteデータベースを削除してから削除します。良いアイデアはありますか? sqliteのアプローチの制約は、これを移植性の高い方法(phpFox Plugin)で実行する必要があり、ほとんどの予算ウェブホストがsqlite3モジュールをサポートしていないことです。

+2

おそらくパイプ経由で渡すことができます。環境変数を設定するには、proc_open()も参照してください。 –

答えて

1

PHPで設定し、Pythonスクリプトで読む環境変数を使用できます。

+0

ありがとう、私はそれを試してみましょう。システム上で実行されている他のユーザーからの安全性と、同じユーザーとして実行されている他のプロセス(Apacheが起動したためユーザー 'nobody' Pythonスクリプトが上書きするのに失敗した場合、PHPスクリプトが終了してからどれくらいの間、環境変数は保持されますか? – dotancohen

+2

部分的な答え:同じユーザーとして実行されている他のプロセスからは安全ではありません:/ proc/$ PID/environを読むことができます。 –

+0

Linux OSの場合は、 'exec(" USERNAME = paul PASSWORD = mypw python script.py ")のようなものを使って、Pythonインタプリタを実行するシェルの環境変数を設定することができます。 PHPプロセスの環境Antonが言っているように、環境はPythonプロセスが実行されている間は同じユーザーにはまだ見えます。 – Bernhard

0

問題を別の角度から見ると、プレーンな文字をexec()に渡すことを隠すと解決できます。 cryptograhic libを使用してプレーンテキストを送信者から隠し、受信者で解読することを検討しましたか?ちょっとした考え。

1

提案された方法は、発生するのを待っているセキュリティ上の問題です。 MyProxyは秘密鍵や証明書を安全に処理する方法です。 MyProxyは必要な特定のソリューションではないかもしれませんが、これらのタイプのソリューションはあなたが目にする必要があるものです。

http://grid.ncsa.illinois.edu/myproxy/

1

あなたはパラメータを読み、PHPから、このようにプロセスを開くためのpythonのプロセスに標準入力を使用することができます。私は、これは他のプロセスに対してどのように安全な知らない

<?php 
$handle = popen("/bin/python /var/www/someScript.py", "w"); 
// write username and password to $handle (e.g. newline separated) 
?> 

(/ proc/nn/fd/0からハイジャックされる可能性はありますが)同じユーザーとして実行されていますが、プロセスリストを見るよりも難しくなります。

関連する問題