首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当部分命令来自用户输入时,在linux服务器上执行命令的安全方法

当部分命令来自用户输入时,在linux服务器上执行命令的安全方法
EN

Stack Overflow用户
提问于 2012-02-20 17:54:14
回答 2查看 2.7K关注 0票数 3

我正在审查一个web应用程序,它公开了用户通过web界面更改unix密码的功能。经过身份验证的web用户提供他的unix用户名和他想要的密码。命令注入在这里是一个明显的攻击矢量。

输入通过授权用户名进行验证和净化,仅在以下文件中:

/^[a-zA-Z0-9]+$/

此后,它执行类似的操作(在python中):

代码语言:javascript
复制
p = os.popen("/usr/bin/passwd " + username, "w")

以此类推。

如果他们没有这个regex,像jon; rm -rf这样的用户名对系统或popen来说将是灾难性的。

我不想做更根本的事情,不会让让我伤害自己,即使像这样的糟糕的输入给系统/popen调用让路了。(例如)。子过程 )

是否有更安全的方法来做到这一点,或者对输入的验证仍然是唯一的防御措施?如果有一种执行命令的标准方式,命令的一部分来自用户输入,那么我在寻找比system/popen更安全的东西,或者寻找一种完全不同的方法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-20 17:56:50

你可以自己引用输入:

代码语言:javascript
复制
import pipes
p = os.popen("/usr/bin/passwd " + pipes.quote(username), 'w')

然而,os.popen是不推荐的,而pipes.quote是一个无文档的函数,所以您最好只使用subprocess模块:

代码语言:javascript
复制
import subprocess
p = subprocess.Popen(["/usr/bin/passwd", username])
票数 3
EN

Stack Overflow用户

发布于 2012-02-20 20:02:00

为了避免代码注入,正确使用API。

http://atlee.ca/software/pam/

python/

与Python模块有关的安全问题?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9365956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档