首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >保护PHP免受会话固定/劫持

保护PHP免受会话固定/劫持
EN

Stack Overflow用户
提问于 2012-01-27 08:13:14
回答 2查看 516关注 0票数 3

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

按照站点的结构方式,信用卡信息页面发送到其自身,验证数据,将数据存储在db中,然后将用户重定向到cc验证页面,在cc验证页面中验证cc并下订单。在此之后,它们再次被重定向到订单完成页面。无论如何,为了从抄送信息页面到验证页面获得抄送号码,我正在考虑使用会话,但我担心漏洞,并正在尝试调查它们(我正在阅读this ref.this one)。我可以将cc号存储在会话中,在下一页检索它,使用它,然后使用它,几秒钟内它就会消失(还要注意,这些页面使用SSL)。类似于:

抄送信息页面:

代码语言:javascript
复制
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验证页:

代码语言:javascript
复制
session_start();
//retrieve $_SESSION['card_number']
unset($_SESSION['card_number']);

只有card#存储在会话中,其余的cc信息存储在数据库中。尽管我不认为有人可以仅仅使用cc#做很多事情,但它仍然应该尽可能地得到保护。

假设我使用了session.use_trans_sid = 0session.use_only_cookies = 1 (其中会话标识符只通过cookie处理,而不是通过URL(不知道为什么我需要这两个)),并且考虑到我使用了这个特定的会话变量,这段代码容易受到会话固定的影响吗?重新生成会话ID (在此之前还是之后?)是否有益?在这种情况下,我在session中设置了cc#?我猜是的,因为到目前为止协议是SSL,我还猜测一旦重新生成了session,我就会受到SSL的保护?

所以,我的主要问题是,在我的网站上遵循这些指导原则,熟练的攻击者会有相当困难的时间来固定/劫持会话,以便在存在的时间内(大约3-15秒)获得用户的cc#吗?如果不是,如果可能的话,我如何才能做到这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-27 10:06:54

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

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

祝好运!

票数 2
EN

Stack Overflow用户

发布于 2012-01-27 08:31:26

你根本不应该存储卡号。默认情况下,PHP将会话存储在计算机上的一个文件中。如果您的机器被攻破,有人可能会从会话文件中窃取信用卡号码。

你应该做的是获取所有信息,并将其直接传递给Authorize.Net这样的信用卡处理器,或者使用允许用户在该服务托管的域名上付款的服务,然后将它们返回给你并提供验证码,这样你就知道他们支付了费用(PayPal有这样的服务,我知道他们不是最好的,但还有其他服务)

捕获信息需要您至少具有一定程度的PCI遵从性。存储卡信息需要更高的级别。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9027391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档