【发布时间】:2012-02-20 02:15:02
【问题描述】:
我正在维护一个在数据库中存储信用卡号的低流量商店网站。这是不对的(甚至我认为是合法的),所以我正在改变数字的存储方式。
网站的结构方式,信用卡信息页面发布到自己,验证数据,将数据存储在数据库中,然后将用户重定向到cc验证页面,在该页面验证cc并下订单。之后,它们再次被重定向到订单完成页面。无论如何,要从 cc 信息页面获取 cc 号码到验证页面,我正在考虑使用会话,但我担心漏洞并试图调查它们(我正在阅读 this ref. 和 this one )。我可以在会话中存储 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']);
只有 card# 被存储在 session 中,其余的 cc 信息在数据库中。虽然我不认为有人可以仅使用 cc# 做很多事情,但仍应尽可能确保它的安全。
鉴于我使用 session.use_trans_sid = 0 和 session.use_only_cookies = 1(会话标识符仅通过 cookie 而不是 URL 处理(不知道为什么我需要两者)),并且考虑到我使用这个特定的会话变量,这段代码是否容易受到会话固定?在这种情况下,我将 cc# 设置为 session 重新生成会话 ID(之后还是之前?)是否有益?我猜是的,并且由于此时协议是 SSL,我还猜测一旦重新生成 session,我就受到 SSL 的保护?
所以,我的主要问题是,按照我的网站的这些指南,熟练的攻击者是否会相当困难地修复/劫持会话来获取用户的 cc# 存在的时间量(大约 3-15 秒) ?如果没有,如果可能的话,我怎样才能做到这一点?
【问题讨论】:
-
session.use_trans_sid使 php 自动修改输出 html,将 session id 添加到某些 url。session.use_only_cookies使 php 只接受来自 cookie 标头的会话 ID。如果没有这个设置,php 会按照 cookie、post 或 get 的顺序查找并接受它。 -
另外,谷歌的 php 会话固定文章。我不认为你会在这里得到一个正确的主题的答案。
-
@chris 你是说我不需要
session.use_trans_sid = 0? -
如果您担心安全问题,您通常希望将其关闭。你说你不知道为什么需要这两个指令,所以我解释了它们的区别。
-
@chris 我明白了,谢谢。我想我不明白为什么如果
session.use_only_cookies = 1会在url 中添加会话ID。这似乎是矛盾的。
标签: php security session session-hijacking