您支持的任何文件都应设计为将(被动)数据与执行的程序完全分离。 应用程序和数据查看器可用于显示外部开发的文件,因此通常不允许它们接受程序(也称为“脚本”或“宏”)。 最危险的一种是自动执行的宏,它在应用程序加载和/或数据最初显示时执行; 从安全的角度来看,这通常是一场灾难。
如果您确实必须支持远程下载的程序(例如,为了实现现有标准),请确保您对宏可以执行的操作具有极强的控制(这通常称为“沙箱”)。 以往的经验表明,真正的沙箱很难正确实施。 事实上,我不记得有哪个被广泛使用的沙箱没有被反复利用过(是的,包括 Java)。 如果可能,至少将程序存储在单独的文件中,这样当另一个沙箱缺陷被发现但尚未修复时,更容易阻止它们。 将它们分开存储也使得在有帮助时更容易重用代码和缓存代码。