当前位置:  开发笔记 > 编程语言 > 正文

如何阻止Django应用程序执行系统调用执行任意命令?

如何解决《如何阻止Django应用程序执行系统调用执行任意命令?》经验,为你挑选了2个好方法。

我有一个我正在开发的Django应用程序,它必须对服务器上的外部程序进行系统调用.在为系统调用创建命令时,应用程序从表单中获取值并将其用作调用的参数.我想这意味着一个人基本上可以使用伪参数并为shell执行任意命令来执行(例如,只需放置一个分号然后rm -rf *).

这是不好的.虽然大多数用户不是恶意的,但这是一个潜在的安全问题.如何处理这些潜在的利用点?

编辑(澄清):用户将看到一个表格,其中包含每个参数和选项的各种字段.但是,某些字段将作为打开文本字段提供.所有这些字段都合并并送入subprocess.check_call().但从技术上讲,这并不仅仅是将用户的命令提示交给用户.这必须相当普遍,所以其他开发人员如何清理输入以便他们不会得到Bobby Tables.



1> Rick Copelan..:

根据我对这个问题的理解,我假设你不是让用户指定在shell上运行的命令,而只是这些命令的参数.在这种情况下,您可以通过使用模块而不使用shell 来避免shell注入攻击(即指定在构造函数中使用default 参数.subprocessshell=Falsesubprocess.Popen

哦,从来没有使用os.system()含有从用户未来的任何输入的任何字符串.



2> Michael Cram..:

从不信任用户.来自Web浏览器的任何数据都应被视为污染.并且绝对不要尝试通过JS验证数据或限制可以在FORM字段中输入的内容.在将服务器传递给外部应用程序之前,您需要在服务器上进行测试.

编辑后更新:无论您如何向前端的用户呈现表单,后端都应该将其视为一组带有大闪烁文本的文本框,说"插入您想要的任何内容!"

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有