PHP 防止 session 固定/劫持

标签 php security session session-hijacking

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

该站点的结构方式是,信用卡信息页面向其自身发布、验证数据、将数据存储在数据库中,然后将用户重定向到 cc 验证页面,在该页面上验证 cc 并下订单。之后,他们将再次重定向到订单完成页面。无论如何,为了从抄送信息页面获取抄送号码到验证页面,我正在考虑使用 session ,但我担心漏洞并试图调查它们(我正在阅读 this ref.this one ).我可以在 session 中存储抄送号码,在下一页检索它,使用它,然后 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));

抄送验证页:

session_start();
//retrieve $_SESSION['card_number']
unset($_SESSION['card_number']);

只有 card# 被存储在 session 中,其余的 cc 信息在数据库中。虽然我不认为有人可以仅使用 cc# 做很多事情,但仍应尽可能确保它的安全。

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

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

最佳答案

即使 session 被劫持,如果您的脚本允许用户查看抄送号码,或者您的网站上有 session 转储,此人也只能获得抄送号码。

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

祝你好运!

关于PHP 防止 session 固定/劫持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9027391/

相关文章:

php - 需要为每个用户存储任意数量的文本段落

c++ - 我如何在 win xp 下在运行时提升我的进程

java - 周围有哪些免费的用于管理 Java keystore 和安全证书的工具

ruby-on-rails - 选择适当的 Rails session 存储

JavaScript 函数 : Add CSS Class if session variable not equal to X

javascript - AJAX 问题处理响应数据显示

php - 更改默认的 Dreamweaver 模板

spring - 为什么LocalSessionFactoryBean 不实现getCurrentSession,同时SessionFactory 的实例可以调用该方法?

php - 无法使用php将图像上传到mysql

node.js - 保持用户匿名 - 仅安全数据库选项 - 一般想法?