我正在维护一个在数据库中存储信用卡号的低流量商店网站。这是不对的(甚至我认为是合法的),所以我正在改变数字的存储方式。
网站的结构方式,信用卡信息页面发布到自己,验证数据,将数据存储在数据库中,然后将用户重定向到 cc 验证页面,在该页面验证 cc 并下订单。之后,它们再次被重定向到订单完成页面。无论如何,为了从 cc 信息页面获取 cc 号码到验证页面,我正在考虑使用会话,但我担心漏洞并试图调查它们(我正在阅读这个 ref。和这个) . 我可以在会话中存储 cc 号码,在下一页检索它,使用它,然后unset()
它会在几秒钟内消失(还要注意,这些页面使用 SSL)。就像是:
抄送信息页面:
session_start();
$_SESSION['card_number'] = $_POST['cardnumber']; //please tell me if there are vulnerabilities here setting directly from $_POST
...
header(sprintf("Location: %s", $insertGoTo));
cc验证页面:
session_start();
//retrieve $_SESSION['card_number']
unset($_SESSION['card_number']);
只有卡号存储在会话中,其余的 cc 信息在数据库中。尽管我不认为有人可以仅使用 cc# 做很多事情,但仍应尽可能确保它的安全。
鉴于我使用session.use_trans_sid = 0
and session.use_only_cookies = 1
(会话标识符仅通过 cookie 而不是 URL 处理(不知道为什么我需要两者)),并且鉴于我使用这个特定的会话变量,这段代码是否容易受到会话固定的影响?重新生成会话 ID(之后还是之前?)session
在这种情况下我设置了 cc# 是否有益?我猜是的,由于此时协议是 SSL,我还猜测一旦session
重新生成,我就受到 SSL 的保护?
所以,我的主要问题是,按照我的网站的这些指南,熟练的攻击者是否会相当困难地固定/劫持会话来获取用户的 cc# 存在的时间量(大约 3-15 秒)?如果没有,如果可能的话,我怎样才能做到这一点?