如何将敏感的perl变量保留在文档根目录之外

时间:2012-12-14 19:54:17

标签: perl

我使用perl多年来作为一种在生成动态网站时操纵MySQL文件的方法。当我在perl 4时代学到了我的技能时,我采用了一些不一定与perl 5.10相关的实践

其中一种做法是将敏感和静态信息(例如MySQL用户名和密码)存储为blah.cfg文件中的全局标量变量,然后将其置于文档根目录之外 - 正如我多年来所做的那样。

然后我在perl顶部附近有一条线:

require "./../../data/blah.cfg";

由此我可以使用变量来访问数据库。

我添加时出现问题:

use strict;
use warnings;

然后我不能拥有这些全局变量,因为它们当然会抛出错误。所以经过几个小时的研究之后,我似乎在浏览信息并发现不再需要使用“require”而我应该“使用”。这似乎是一场火灾的洗礼:库,包,模块等......如果模块在路径之外我需要使用FindBin来定位它 - 但是如果我使用的是mod_perl ......

是否有一种简单有效的方法来存储两个简单变量并以安全的方式检索它们?

3 个答案:

答案 0 :(得分:1)

您可以使用实际的配置文件(以及类似Config :: Any的内容),或者如果继续使用Perl模块,只需正确执行即可。

use strict;
use warnings;

package MyConfig;

use Exporter qw( import );

our @EXPORT = qw( %config );

our %config = (
   ...
);

1;

然后你可以使用

use MyConfig qw( %config );
... $config{...} ...

(不要使用“Config”作为模块名称;它已经存在。)

答案 1 :(得分:0)

您可以将文件路径存储在您创建的perl模块中。然后,在该模块上创建一个getter方法以返回文件路径。

在您的主脚本中,“使用”该模块并在需要文件路径时调用getter。

使用该模块的行为与全局变量类似。文件路径只存储在一个地方(改进维护),但可以在任何地方访问(甚至其他脚本)。

我不记得Perl,但我认为你必须在整个系统的任何单独脚本中“使用”你的模块。

答案 2 :(得分:0)

将配置数据存储在配置文件中而不是其他脚本中会更好。有很多模块可以为您解析配置文件。

编辑:

为什么首先在文档根目录中有任何代码?无论整个敏感配置问题如何,这似乎都是一个坏主意。