用预定义的字符串安全调用shell吗?

时间:2016-12-27 21:13:58

标签: python security

所以,当我在python中阅读Subprocess的文档时,我遇到了这个问题。所以,让我们使用示例,因为程序员理解代码。

from Subprocess import Popen, PIPE

def connect_with_netCat(port, ip):
  Popen('nc %s %s' % (ip, port), shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE)

我的问题;这样安全吗?我知道netcat是一个糟糕的选择,例如,因为它也为攻击者留下漏洞来调用该函数并连接到某个地方,但它是第一个出现在我脑海中的一个例子,但只是查看代码 - 是否安全因为它中有常数吗?

或者这会是一种更安全的方式吗?

def connect_with_netCat(port, ip):
  from Subprocess import Popen, PIPE
  Popen('nc %s %s' % (ip, port), shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE)

因为它超出了全球范围。只是一个奇怪的问题。

1 个答案:

答案 0 :(得分:1)

如果您确定ipport的来源是安全的,那么该命令应该是安全的。

为了更安全一点,您可以省略shell=True,因为您没有在命令中使用任何shell语法。这样,如果命令中有shell操作符,则不会被解释。

您还应该使用%d代替%s作为端口,因为这需要是一个数字。