我正在审查一个web应用程序,它公开了用户通过web界面更改unix密码的功能。经过身份验证的web用户提供他的unix用户名和他想要的密码。命令注入在这里是一个明显的攻击矢量。
输入通过授权用户名进行验证和净化,仅在以下文件中:
/^[a-zA-Z0-9]+$/
此后,它执行类似的操作(在python中):
p = os.popen("/usr/bin/passwd " + username, "w")以此类推。
如果他们没有这个regex,像jon; rm -rf这样的用户名对系统或popen来说将是灾难性的。
我不想做更根本的事情,不会让让我伤害自己,即使像这样的糟糕的输入给系统/popen调用让路了。(例如)。子过程 )
是否有更安全的方法来做到这一点,或者对输入的验证仍然是唯一的防御措施?如果有一种执行命令的标准方式,命令的一部分来自用户输入,那么我在寻找比system/popen更安全的东西,或者寻找一种完全不同的方法。
发布于 2012-02-20 17:56:50
你可以自己引用输入:
import pipes
p = os.popen("/usr/bin/passwd " + pipes.quote(username), 'w')然而,os.popen是不推荐的,而pipes.quote是一个无文档的函数,所以您最好只使用subprocess模块:
import subprocess
p = subprocess.Popen(["/usr/bin/passwd", username])发布于 2012-02-20 20:02:00
https://stackoverflow.com/questions/9365956
复制相似问题