【发布时间】:2020-08-04 17:20:24
【问题描述】:
我有一个 Perl 应用程序,它在两种情况下使用:它可以用作显示系统信息的诊断工具,或用作向该系统发送 Modbus 命令的测试工具。我遇到的问题是允许用户在诊断上下文中向系统发送命令存在潜在的安全风险,因此我想创建两个可执行文件:一个包含 Modbus 模块的测试版本和一个不包含 Modbus 模块的诊断版本。
我目前的解决方案是像这样包含 Modbus 模块:
BEGIN { eval { require Modbus; }; Modbus->import; }
这仅包括 Modbus 模块,如果我在使用 PAR Packager 构建 .exe 时使用选项 -M Modbus。这种方法的问题是它会失败,除非这是 only 导入 Modbus 的地方。因此,如果出现另一个不知道此风险的开发人员,只需一个 require 语句即可绕过此修复。
我是否有办法阻止特定模块包含在可执行文件中,除非我明确希望它包含(使用 -M 选项或其他方法)?我一直在尝试用 Devel::Hide 解决问题,但运气不佳。到目前为止,我发现的所有解决方案都未能通过“其他不了解此情况的开发人员”测试。
我使用的是 Strawberry Perl 5.20.3.3,但如有必要,我可以升级。
【问题讨论】:
-
您能否提供一个可重复的小例子来说明您正在做什么。可能有助于为您找到解决方案。
-
除了发布专有源代码之外,我不确定能否提供更多详细信息。我有一个模块可用于在某些情况下做不安全的事情,我需要一种方法来防止该模块在不依赖未来开发人员意识到风险的情况下使用。生成两个不同的可执行文件是可行的,但我需要一种方法来排除更难被意外破坏的危险模块。
-
使用 OOP 的强大功能。如果需要,请创建对象。
-
@k-mx 我不清楚这有什么帮助。你能说得更具体点吗?
标签: perl