我对Perl并不十分熟悉,但在过去的两天里,我一直在文档和其他来源中搜索,但没有成功。文件中写着:
Perlv5.18包含对多个哈希函数的支持,并将默认值更改为
ONE_AT_A_TIME_HARD,您可以通过在编译时定义一个符号来选择不同的算法。有关当前列表,请参阅安装文档。注意,从Perlv5.18开始,我们只能推荐使用默认值或SIPHASH。所有其他的都是已知的安全问题,并且只用于研究目的。
问题是,无论是在安装文件或其他来源/网站等,我可以找到如何定义这个符号。
我想要做的是将默认的ONE_AT_A_TIME_HARD哈希函数更改为ONE_AT_A_TIME_OLD,以便模拟旧的Perl5.16行为。
发布于 2015-08-14 09:00:36
这听起来像是XY的问题。通过强制将perl中的哈希算法降级为一个已知问题的哈希算法,您想要完成什么?
来自评论:
我需要运行许多用perl 5.16编写的测试用例,这些测试用例的功能依赖于旧的哈希实现,而且不可能更改代码,因为用例有数百个。
哇,这是个坏消息。找到那些开发人员,然后用一个拷贝perldata打中他们的头部。
散列是按其关联的字符串键索引的标量值的无序集合。
具体来说--如果这对你来说是个问题,那就意味着你的代码库按顺序处理散列,而它们不是,也从来没有。(只是在5.18之前它们是相当一致的,之后则是随机的)。
来自perldelta
当遇到这些更改时,清理它们的关键是接受散列是无序的集合,并采取相应的行动。
请参阅:http://blog.booking.com/hardening-perls-hash-function.html
回答你的问题-如果你真的必须:
./Configure -DPERL_HASH_FUNC_ONE_AT_A_TIME_OLD -des && make && make test但是这是一个非常糟糕的主意,因为正如您的perl源代码包中的INSTALL文件所指出的:
注意,从Perl 5.18开始,我们只能推荐使用default或SIPHASH。所有其他的都是已知的安全问题,并且只用于研究目的。
通过这样构建您的perl,您将为使用它的每个perl程序引入一个已知的安全漏洞。
注意- ONE_AT_A_TIME_HARD是新的默认设置,因此这不会改变perl 5.18的工作方式。你的意思可能是PERL_HASH_FUNC_ONE_AT_A_TIME_OLD
https://stackoverflow.com/questions/32006026
复制相似问题