我正在研究一个允许用户在我们的系统上运行其代码的系统。虽然他们的代码是沙盒,但我仍然想知道他们的代码是否使用某些语句,特别是导入。这用于快速检查恶意代码或代码是否违反平台的指导原则,它不会是唯一的检查,因为代码稍后也会被人类检查,但是自动筛选出最坏的情况会更可取。检查某些语句的Python代码
那么最好的方法是什么,而不执行代码来检查他们的代码是否导入sys
(或sys
的一部分)?我希望有一个更好/更好的方法,然后正则表达式 - 搜索代码。
奖金问题:更复杂的陈述呢?例如从模块bar
调用foo
?
编辑:这不是一个关于安全性的问题。这是关于在代码中查找某些语句的。看到我的评论。这个用户代码只会在用户沙箱内运行,所以他们可以毁掉他们自己的沙箱。但是,如果他们的代码获得'认证',它可以在其他用户沙箱中运行,在获得认证之前需要检查它们。如果自动检查可以发现最严重的违规行为,那将会有所帮助。
人类需要做一个非常全面的检查。例如,通过使用'exec'命令,可以找到在此实现的任何简单系统的解决方法。 – Oliver
我可能是错的,但我想不出除扫描源文件为文本文件之外的任何其他方法:如果您让python解释器执行它们,您将无法在导入语句和模块之前自行查询代码,级别的功能已经执行......但也许我缺少部分问题? – mac
@Oliver ...仍然...即使人类可能会遇到麻烦,如果代码被模糊处理(例如酸洗/压缩/ rot13's等) – mac