如何使用PHP创建不可预测的Cookie会话ID

时间:2011-12-12 17:27:31

标签: php session magento cookies pci-compliance

我的网站需要通过PCI合规性。

使用Magento 1.5.1的站点(Magento是基于PHP的系统),PCI complience失败是可预测的Cookie会话ID。

我认为这意味着他们希望Magento中的cookie名为" frontend"更改为随机UUID。我认为没有修改或扩展核心可以做到这一点,但我找不到这样做的设置。

思想?

下面是漏洞描述:

远程Web应用程序正在使用可预测的基于cookie的会话 标识。理想情况下,会话ID是随机生成的数字,不能 被攻击者猜到了。如果会话ID是可预测的,则为攻击者 可以劫持一个活跃的受害者

1 个答案:

答案 0 :(得分:0)

我不确定这是否会有所帮助,但这和我知道如何进行会话设置一样安全。我很想被比我更了解的人纠正,因为它会直接影响我所有的电子商务项目。

下面的代码中引用了current_domain()函数来自我的opensource framework(链接到包含该函数的文件)。如果您不需要动态域名替换,则可以在那里对您的域进行硬编码。

<?
ini_set( 'session.use_trans_sid',       false                   );
ini_set( 'url_rewriter.tags',           ''                      );
ini_set( 'session.use_cookies',         true                    );
ini_set( 'session.use_only_cookies',    true                    );
ini_set( 'session.name',                sha1( current_domain()  ) ); // current domain is a function implemented in tgsf
ini_set( 'session.cookie_lifetime',     0                       ); // until browser is closed.  I implement this server side

ini_set( 'session.hash_function',           1 ); // sha-1
ini_set( 'session.hash_bits_per_character', 6 );

// only if host is not localhost 
ini_set( 'session.cookie_domain', 'www.example.com' );

// use for localhost
//ini_set( 'session.cookie_domain', null );

ini_set( 'session.cookie_path', '/' ); // limit as much as you can for security
ini_set( 'session.cache_limiter',           'nocache' ); //prevents back button displaying a page after session is dead
ini_set( 'session.cookie_httponly',         true ); // helps prevent xss by preventing javascript access to the session cookie (on SOME browsers, not all)