5

我有一个与 API 交互的 Python 脚本。该脚本从 PHP 页面启动。我编写了两个脚本,因此我可以根据需要更改其中的代码。

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 插件),并且大多数预算网络主机不支持该sqlite3模块。

4

4 回答 4

1

您可以使用在 PHP 中设置并在 Python 脚本中读取的环境变量。

于 2013-01-25T14:00:58.343 回答
1

所提出的方法是一个等待发生的安全问题。MyProxy 是一种处理私钥或证书的安全方式。MyProxy 可能不是您需要的特定解决方案,但这些类型的解决方案正是您需要考虑的。

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

于 2013-01-26T05:07:39.707 回答
1

您可以在 python 进程中使用 stdin 来读取参数,并从 php 中打开这样的进程:

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

我不知道这对于以同一用户身份运行的其他进程有多安全(是否可以从 /proc/nn/fd/0 劫持?),但这肯定比仅查看进程列表更难。

于 2013-01-26T13:43:34.693 回答
0

从另一个角度来看问题,如果隐藏传递给 exec() 的纯字符,它可以解决。您是否考虑过使用任何密码库向发送者隐藏纯文本并在接收者中解密?只是一个想法。

于 2013-01-25T14:03:54.970 回答