启动进程,隐藏ps中的参数
我有一个Python脚本,它可以和一个API进行交互。这个脚本是从一个PHP页面启动的。我写了这两个脚本,所以我可以根据需要修改其中的任何一个。
这个Python脚本需要一个用户名和密码来和API进行交互。我最初的想法是把它们作为命令行参数传给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 个回答
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 这个地方劫持?),不过这确实比单纯查看进程列表要难一些。
1
这些提议的方法其实是一个潜在的安全隐患。MyProxy 是一种安全处理私钥或证书的方式。虽然 MyProxy 可能不是你需要的具体解决方案,但这类解决方案正是你应该关注的方向。
2
你可以使用环境变量,这些变量在PHP中设置,然后在Python脚本中读取。