启动进程,隐藏ps中的参数

时间:2013-01-25 13:58:39

标签: php python security

我有一个与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插件),并且大多数预算的webhost都不支持sqlite3模块。

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

答案 2 :(得分: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劫持它吗?)但是它确实比仅查看进程列表更难

答案 3 :(得分:0)

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