3

我正在维护一个在数据库中存储信用卡号的低流量商店网站。这是不对的(甚至我认为是合法的),所以我正在改变数字的存储方式。

网站的结构方式,信用卡信息页面发布到自己,验证数据,将数据存储在数据库中,然后将用户重定向到 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 = 0and session.use_only_cookies = 1(会话标识符仅通过 cookie 而不是 URL 处理(不知道为什么我需要两者)),并且鉴于我使用这个特定的会话变量,这段代码是否容易受到会话固定的影响?重新生成会话 ID(之后还是之前?)session在这种情况下我设置了 cc# 是否有益?我猜是的,由于此时协议是 SSL,我还猜测一旦session重新生成,我就受到 SSL 的保护?

所以,我的主要问题是,按照我的网站的这些指南,熟练的攻击者是否会相当困难地固定/劫持会话来获取用户的 cc# 存在的时间量(大约 3-15 秒)?如果没有,如果可能的话,我怎样才能做到这一点?

4

2 回答 2

2

即使会话被劫持,如果您的脚本允许用户查看 CC 编号,或者您的站点上存在会话转储,此人也只能获得 CC 编号。

还要记住,将抄送号码以明文形式存储在数据库中可能是非法的。如果您担心数据被盗,请务必对所有敏感数据进行编码或加密。

祝你好运!

于 2012-01-27T02:06:53.997 回答
0

您根本不应该存储卡号。默认情况下,PHP 将会话存储在您机器上的文件中。如果您的机器遭到入侵,有人可能会从会话文件中窃取信用卡号。

您应该做的是获取所有信息并将其直接传递给 Authorize.Net 之类的信用卡处理器,或者使用允许用户在该服务托管的域上付款的服务,然后将它们与验证码一起返回给您所以你知道他们付了钱(贝宝有这样的服务,我知道他们不是最好的,但还有其他的)

完全捕获信息需要您至少具有一定程度的 PCI 合规性。存储卡信息根本需要更高的级别。

那里有很多关于 PCI 的东西。这是关于它的维基:http ://en.wikipedia.org/wiki/Payment_Card_Industry_Data_Security_Standard

于 2012-01-27T00:31:26.267 回答