Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP保护免受会话固定/劫持_Php_Security_Session_Session Hijacking - Fatal编程技术网

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

PHP保护免受会话固定/劫持,php,security,session,session-hijacking,Php,Security,Session,Session Hijacking,我正在维护一个低流量商店网站,在数据库中存储信用卡号码。这是不对的(我认为甚至是不合法的),所以我正在改变数字的存储方式 按照网站的结构,信用卡信息页面会自动发布、验证数据、将数据存储在数据库中,然后将用户重定向到cc验证页面,在该页面上验证cc并下订单。之后,它们会再次重定向到订单完成页面。无论如何,为了将抄送号码从抄送信息页面转到验证页面,我曾考虑使用会话,但我担心存在漏洞,并试图对其进行调查(我正在阅读和验证)。我可以在会话中存储cc号,在下一页检索它,使用它,然后unset()it,它会

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

按照网站的结构,信用卡信息页面会自动发布、验证数据、将数据存储在数据库中,然后将用户重定向到cc验证页面,在该页面上验证cc并下订单。之后,它们会再次重定向到订单完成页面。无论如何,为了将抄送号码从抄送信息页面转到验证页面,我曾考虑使用会话,但我担心存在漏洞,并试图对其进行调查(我正在阅读和验证)。我可以在会话中存储cc号,在下一页检索它,使用它,然后
unset()
it,它会在几秒钟内消失(另外请注意,这些页面使用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']);
只有卡#存储在会话中,其余的cc信息存储在数据库中。虽然我不认为有人可以只用cc做很多事情,但它仍然应该尽可能地得到保护

假设我使用了
session.use_trans_sid=0
session.use_only_cookies=1
(其中会话标识符仅通过cookie而不是URL进行处理(不确定为什么我需要两者)),并且假设我使用了此特定会话变量,此代码是否容易受到会话固定的影响?在本例中,我在
会话中设置了cc#是否有利于重新生成会话ID(在之后还是之前)?我猜是的,既然协议在这一点上是SSL,我也猜一旦
会话
被重新生成,我就会得到SSL所能提供的保护


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

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

你应该做的是将所有信息直接传递给像Authorize.Net这样的信用卡处理程序,或者使用一项服务,允许用户在该服务托管的域上付款,然后使用身份验证码将其返回给你,这样你就知道他们已付款(贝宝有这样的服务,我知道他们不是最好的,但还有其他的)

捕获信息要求您至少具有某种程度的PCI合规性。存储卡信息需要更高的级别


关于PCI有很多东西。下面是它的wiki:

即使会话被劫持,只有当您的脚本允许用户查看CC号,或者您的站点上有会话转储时,用户才能获得CC号

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


祝你好运!

同意。根本不存储信用卡号码就等于否定了系统受损的责任。我想知道为什么索尼Playstation在几个月前被黑客攻击时存储了信用卡号码,并实际承担了这一责任。即使在I
unset()之后,服务器上的会话文件是否仍然保存着这些信息
it?我同意你完全不存储它。最初的开发人员是这样设计的,我对此不太满意,因为他们可以很容易地在同一个页面中完成。我想最好的办法就是将两个页面集成起来。谢谢你的回答。@shreader不,在你
取消设置会话变量之后,这些信息不再存在于相关的会话文件中,但最好也使用
session_destroy
,它会销毁注册到会话的所有数据。会话文件是经过编码的…它也不容易被解码。如果我记得正确的话,PHP会在运行时生成密钥,因此磁盘上的会话数据应该是安全的…@AdamSack太棒了!你有任何资源来备份吗?
会话。使用\u trans\u sid
可以让php自动修改输出html,将会话id添加到特定URL。
会话。使用\u only\u cookies
可以让php只接受来自cookie头的会话id。如果没有此设置,php会通过cookie、post或get查找并接受它,按此顺序。另外,谷歌搜索php会话固定文章。我不认为你会在这里得到一个正确的答案。@chris,你是说我不需要
会话。使用\u trans\u sid=0
?如果安全是一个问题,你通常希望它关闭。你说你不知道为什么需要这两个指令,所以我解释了它们的d差异。@chris我明白了,谢谢。我想我不明白为什么它会在
会话的情况下将会话id添加到URL。使用\u only\u cookies=1
。这似乎是矛盾的。很抱歉反应太晚。“即使会话被劫持,如果您的脚本允许用户查看CC号码,此人也只能获得CC号码。”-这正是我需要听到的,谢谢!”或者你的网站上有一个会话转储”-你这是什么意思?类似于var_dump($_session);用户可以看到会话的内容。