我有一个问题,希望你能帮忙.假设我为一家名为“Blammo”的假想公司工作,我们有一个名为“Log”的假设产品.我正在尝试建立一个系统,有人可以登录到logfromblammo.com并订购我们的一些产品,然后当他们准备购买时,请到checkout.blammo.com支付他们的订单.最终我想允许Blammo在其自己的网站上推出一个新的假设产品:rockfromblammo.com,并且该网站还能够与checkout.blammo.com共享会话,以便用户可以在这两个产品上拥有一个购物车网站.

当然,上面描述的假设情景并不是我公司的实际运作方式,但它是我需要做的一个公平的例子.我们有一个现有的用户数据库,我们有办法对我们任何网站上的任何用户进行身份验证,但我的目标是允许用户无需重新进行身份验证即可从一个站点无缝跨越到另一个站点.这也允许我们将诸如购物车之类的数据无缝地传输到结账站点.

我(简要地)看过OpenID这样的解决方案,但是我需要能够将我们现有的任何解决方案与现有的身份验证方法集成在一起,这种方法并不十分强大.有没有什么好方法可以通过PHP单独做到这一点?

您可以做的是在站点之间创建“交叉”链接以进行会话.

最简单的方法是通过查询字符串传递会话ID;例如

http://whateverblammo.com/?sessid=XXYYZZ

在您开始认为任何人都可以捕获该信息之前,请考虑一下您的cookie是如何传输的;假设您没有使用SSL,那么点击网络的人没有太大区别.

这并不意味着它是安全的;例如,用户可能会意外地复制/粘贴地址栏,从而泄露其会话.要限制此曝光,您可以在收到后立即重定向到没有会话ID的页面.

请注意,在会话ID上使用mcrypt()将无济于事,因为它不是问题值的可见性;会话劫持并不关心底层值,只关注它的重现性.

你必须确保id只能使用一次;这可以通过创建一个跟踪使用计数的会话变量来完成:

$_SESSION['extids'] = array();

$ext = md5(uniqid(mt_rand(),true)); // just a semi random diddy
$_SESSION['extids'][$ext] = 1;

$link = 'http://othersite/?' . http_build_query('sessid' => session_id() . '-' . $ext);

收到时:

list($sid,$ext) = explode('-',$_GET['sessid']);
session_id($sid);
session_start();
if (isset($_SESSION['extids'][$ext])) {
    // okay,make sure it can't be used again
    unset($_SESSION['extids'][$ext]);
}

每次越过边界时都需要这些链接,因为会话可能自上次重新生成.

php – 安全灵活的跨域会话的更多相关文章

  1. php – 会话只存储在浏览器中吗?

    我的网站遭到暴力攻击,攻击者试图访问用户帐户.机器人没有用户代理.我有一个系统阻止一个人在10分钟内超过每个帐户3次尝试登录.我还检查了用户代理,如果没有,退出.我的问题是:会话只存储在浏览器中吗?我在想的是他们正在使用通过命令行执行的脚本.我也实现了这个:我还能做些什么来阻止这些攻击吗?

  2. PHP检查用户代理和IP以防止会话劫持

    我正在试图弄清楚如何防止会话劫持.这就是我在想的事情:与用户标识会话一起,也添加用户代理和用户IP会话.每次加载页面时,都会检查这些会话以查看它们是否匹配–这是否足够?

  3. PHP登录系统

    我正在使用PHP为Web应用程序创建登录系统.我的问题是,仅在当前会话中存储用户登录信息是否安全?例如,如果名为John的用户成功登录到我的站点,我可以只存储$_SESSION[‘Username’]=’John’和$_SESSION[‘LoggedIn’]=1然后检查$_SESSION[‘LoggedIn’]在每页上等于1以验证用户是否实际登录?

  4. php – 将用户会话变量存储在数据库中的文件vs中

    我有一个PHP应用程序,我正在使用$_SESSION为用户保存会话变量.存储在数据库中有什么特别的优点吗?

  5. 使用PHP在两个页面之间传递变量的最安全方法

    现在我想知道有没有比这些方法更好的方法,如果没有这些方法,那么这是以安全方式传递变量的最佳方法;会话是您可用的最安全的方法.会话ID重新生成将有助于防止会话劫持,但通过https的SSL将真正防止它.顺便说一句:如果会话被劫持并且您正在向客户端显示用户数据,那么无论您如何将数据传输到第二页,劫持者都会看到它.如果你只是在服务器端使用它,那么劫机者就不会看到它.

  6. php – 再生会话ID

    我正在考虑在每个页面上使用这个代码来减少会话劫持的可能性.通过在每个请求上更新session_id实现这一目标的另一种方法是这样做:但是,我听到这个功能的批评,说如果页面由于某种原因刷新速度太快,会话ID变得无效.使用会话ID的另一种方法是更好地控制会话的生成方式.还有其他方法可以实现这个最好的做法?而不是生成会话ID,为什么不加密和使用已经生成的一个.当预期的操作完成时,它可以被使用和销毁.

  7. php – 加密会话变量有什么安全性好处吗?

    例如,会阻止会话劫持吗?如果没有,我该怎么做才能使我的PHP会话安全?

  8. 登录系统(PHP)Cookie和会话

    我想使用cookie/session建立一个登录系统,但我不确定它们的安全性是什么样的.对于会话,如果“login”设置为“yes”,我可以信任吗?用户是否能够改变它返回的内容?我应该只存储加密密码并在每个页面上进行检查吗?使用cookies,我是否需要检查mysql注入等内容?这可能听起来像初学者的东西,但如果有人能为我澄清它会真的有帮助.在此先感谢您的回复!

  9. PHP会话的cookie是否安全?

    我正在努力确保我的会议安全.在做一些研究时,我估计基于Agent和IP的PHP的PHPSESSID随机哈希足以防止劫持.你能做什么呢,真的.我使用HTTPS登录.据我所知,PHP的会话数据永远不会发送给用户,而是存储在服务器端.客户端仅获取会话的ID.会话数据保存实际的webapp用户会话,而后者又用于检查登录是否有效.一切都很好,花花公子.但是,有一个我在任何地方都找不到的细节.我想知道如果我使

  10. php – 使用会话变量而不是隐藏的输入字段更安全吗?

    我知道在页面之间传递参数的两种方法:>使用POST和>使用$_SESSION[“variable_name”]我发现第二种方式更容易,但我想知道它是否与第一种方法一样安全,因为在我看到的大多数教程中,它们都使用第一种方式.有没有什么重要的理由喜欢第一种方式?否–客户端看到的唯一内容是cookie中的随机会话ID;数据本身存储在服务器上.用户是否能够更改或操作存储的数据?

随机推荐

  1. PHP个人网站架设连环讲(一)

    先下一个OmnihttpdProffesinalV2.06,装上就有PHP4beta3可以用了。PHP4给我们带来一个简单的方法,就是使用SESSION(会话)级变量。但是如果不是PHP4又该怎么办?我们可以假设某人在15分钟以内对你的网页的请求都不属于一个新的人次,这样你可以做个计数的过程存在INC里,在每一个页面引用,访客第一次进入时将访问时间送到cookie里。以后每个页面被访问时都检查cookie上次访问时间值。

  2. PHP函数学习之PHP函数点评

    PHP函数使用说明,应用举例,精简点评,希望对您学习php有所帮助

  3. ecshop2.7.3 在php5.4下的各种错误问题处理

    将方法内的函数,分拆为2个部分。这个和gd库没有一点关系,是ecshop程序的问题。会出现这种问题,不外乎就是当前会员的session或者程序对cookie的处理存在漏洞。进过本地测试,includes\modules\integrates\ecshop.php这个整合自身会员的类中没有重写integrate.php中的check_cookie()方法导致,验证cookie时返回的username为空,丢失了登录状态,在ecshop.php中重写了此方法就可以了。把他加到ecshop.php的最后面去就可

  4. NT IIS下用ODBC连接数据库

    $connection=intodbc_connect建立数据库连接,$query_string="查询记录的条件"如:$query_string="select*fromtable"用$cur=intodbc_exec检索数据库,将记录集放入$cur变量中。再用while{$var1=odbc_result;$var2=odbc_result;...}读取odbc_exec()返回的数据集$cur。最后是odbc_close关闭数据库的连接。odbc_result()函数是取当前记录的指定字段值。

  5. PHP使用JpGraph绘制折线图操作示例【附源码下载】

    这篇文章主要介绍了PHP使用JpGraph绘制折线图操作,结合实例形式分析了php使用JpGraph的相关操作技巧与注意事项,并附带源码供读者下载参考,需要的朋友可以参考下

  6. zen_cart实现支付前生成订单的方法

    这篇文章主要介绍了zen_cart实现支付前生成订单的方法,结合实例形式详细分析了zen_cart支付前生成订单的具体步骤与相关实现技巧,需要的朋友可以参考下

  7. Thinkphp5框架实现获取数据库数据到视图的方法

    这篇文章主要介绍了Thinkphp5框架实现获取数据库数据到视图的方法,涉及thinkPHP5数据库配置、读取、模型操作及视图调用相关操作技巧,需要的朋友可以参考下

  8. PHP+jquery+CSS制作头像登录窗(仿QQ登陆)

    本篇文章介绍了PHP结合jQ和CSS制作头像登录窗(仿QQ登陆),实现了类似QQ的登陆界面,很有参考价值,有需要的朋友可以了解一下。

  9. 基于win2003虚拟机中apache服务器的访问

    下面小编就为大家带来一篇基于win2003虚拟机中apache服务器的访问。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. Yii2中组件的注册与创建方法

    这篇文章主要介绍了Yii2之组件的注册与创建的实现方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下

返回
顶部