背景/上下文:我正在使用Golang开发Linux NAS服务器(如FreeNAS或Rockstor),其特殊功能将是JSON-REST API,以便您可以与LVM2进行交互,共享,包等等。
问题:关于安全性,性能和开发时间,对于程序的某些功能,产生进程或使用本机库的优点/缺点/最佳实践是什么?
示例:对于我的特定用例,NAS管理系统将使用LVM2来管理卷。但是,您可以使用CLI来操作卷,也可以尝试使用LVM2本机C API并将其与Golang cgo
包合并。
编辑:改述我的问题/信息。
答案 0 :(得分:2)
在不同的变体nogo中使用exec
可能会产生两件事:安全性和速度。
安全性:如果你与system()
或朋友一起出局,你必须绝对确定你不会在命令中包含任何字符串,这些字符串可能会对你的命令行做出有趣的事情。它与SQL代码注入的基本问题相同,只是在更低,甚至更灾难的层(obligatory XKCD,只需替换"'); DROP TABLE学生; - "有效的sh代码沿着'";回声" pwnd',好吧,你明白了。)
速度:当您对现有程序进行外壳创建时,您将创建一个新进程,这可能是您无法容忍的性能损失。如果您执行的任务花费的时间超过几毫秒(在Linux上创建的进程在毫秒范围内),那么完全没问题,但是如果您每秒需要超过一千个调用,那么您肯定需要避免这种开销。
如果这两点得到处理或被证明是非问题,那么完全可以支持其他流程。