【发布时间】:2010-08-05 19:56:06
【问题描述】:
首先,是的,我知道这是一个很大的安全NONO。但场景是这样的;
在网店结账时,我使用支付网关,它可以通过他们的 SSL 代理我的结账表单。
(以下网址只是理论,其他网址申请)
它的工作方式是,网站将用户重定向到他们的 https://gateway.org/secure-tunnel.php 在这样的查询中传递一个 url ?url=http://myshop.com/cc-form.php
安全隧道请求 url - 在文档中的 url 上添加一些魔法 - 并将其显示给用户。
现在我想将会话 ID 传递给 cc-form.php url,并让该部分正常工作。但是请求的页面没有获取传递的会话 ID。
对此有什么想法吗?
以下来自我的application.ini
resources.session.name = UPSSESSID
resources.session.save_path = APPLICATION_PATH "/../data/session"
resources.session.use_only_cookies = off
resources.session.referer_check = off
resources.session.remember_me_seconds = 864000
另外,在研究过程中,我发现 Suoshin 扩展可能会导致一些问题,所以我将其添加到 .htaccess 中
php_flag suhosin.session.cryptua off
我使用通往付款表单的路线
$this->_helper->url->url(array(session_name() => Zend_Session::getId()), 'payment')
编辑:可能的,相当狡猾的解决方案
我实际上设法通过将其插入到我的引导文件中的_initApplication() 来恢复会话。它相当狡猾,所以如果有人知道更好 - 更 ZF'ish - 方式请指教!
if(isset($_GET[$appConfig->resources->session->name])) {
session_id($_GET[$appConfig->resources->session->name]);
}
编辑:DOH!
嗯.. 原来之前的编辑是不需要的。就在我将前几行添加到引导程序之前,我还更改了 url 布局。
将其从 /pay/UPSSESSID/{session-id-here} 更改为 /pay?UPSSESSID={session-id-here} - 这实际上是问题的根源 :(
现在我已经从引导程序中删除了这些行,并且我正确恢复了 sessionId。
我的错!
【问题讨论】:
-
我假设 wan't 是 want 而不是 don't want 的组合/错字?跨度>
-
如果您解释为什么您需要这样做,我认为您可能会得到更多的回应...我不确定您是否真的了解这对安全的影响.
-
我确实理解这对安全的影响,实际上是在我的第一段中写的。我需要这个来确保用户会话不会在服务器之间的重定向中丢失。一旦用户点击“我想用信用卡付款” - 用户将被定向到(PG)支付网关公司的网络服务器,该服务器从我的服务器代理信用卡表单页面。 cc-form-page 中的表单提交到 PG-server 上的另一个页面,并添加了 OK-URL 和 fail-URL 作为参数....
-
... 如果 CC 结帐正常,用户将被定向到我的服务器上的 OK-URL,该 URL 以“已付款”完成订单。所以OK-URL和fail-URL也需要SessionID,所以用户完成支付后依然是登录状态。
-
所有这一切都是由于丹麦的一些规则,基本上拒绝在商店服务器上使用信用卡表格,即使他们获得了 SSL。所有包含 CC 数据的输入和请求都应通过授权的支付网关及其 SSL。归根结底,这是为了保护消费者。我可以使用支付窗口,但它会带来所有其他类型的问题 - 弹出窗口拦截器等。
标签: php zend-framework sessionid