是的,通过参数传输到脚本是通过等可见的ps -ax
,/proc/<pid>/cmdline
但是如果有人已经从外部获得了对您帐户的访问权限(例如通过入侵您的浏览器),他不仅可以轻松查看ps -ax
,而且还可以定期拦截/proc/<pid>/fd/0
(一旦被拦截,第二次被跳过,以减少可疑)。
但这没什么,因为如果入侵者访问了您的帐户,他只需运行键盘记录器(监听 x11 服务器)并拦截击键并不难。
我目前正在编写一个通过 sudo (root) 运行并接受敏感数据的脚本。当直接将它们(作为参数)发送到脚本时,我可以使用 sudo ( user ALL = (root) NOPASSWD: /bin/program [0-9][0-9a-z][0-9a-z]...
) 硬限制参数中使用的字符,以便攻击者无法使用特殊字符组合绕过限制并因此获得 root 访问权限。
通过管道(stdin)获取数据时,我当然也会过滤数据:
#!/bin/sh
pass=$(dd if=/dev/stdin bs=1 count=10 2>/dev/null | tr -cd [:alnum:])
,但我认为通过 sudo 限制参数的简单规则更安全(在脚本本身中也会有额外的检查)。
那么通过标准输入或参数之间有根本的区别吗?