2009-06-08 124 views
1

因此,我正在尝试编写一个PHP SOAP客户端,该客户端需要用户为远程SOAP服务器传递其登录凭证。这是设置/困境:通过PHP保持登录凭据服务器端(安全和安全)

  • 用户使用本地凭证登录到本地站点,并转到使用SOAP客户端的页面。
  • 用户现在被提示输入远程Soap服务器的凭证,顺便说一下,它与用于通过POST表单访问本地站点(10次中的9次)的凭证相同。
  • 客户端传递SOAP头中的凭证以及SOAP请求,客户端输出SOAP服务器响应。
  • 脚本结束,用户看到输出数据。

现在用户想要一些与原始输出相关的其他数据位。问题是,$ _POST变量现在已经消失了。用户必须包含凭证以及下一个请求。重复,直到用户决定通过另一种方法查找数据变得更容易,并放弃使用酷的SOAP客户端。

托管Web服务的服务器可以通过Web客户端直接访问,并通过cookie维护身份验证。但是,当通过WDSL查询服务器时,它不会查找任何Cookie或其他浏览器端会话;它只是检查SOAP请求是否包含头中的凭证。

所以有这个问题的两个版本:

1)是否有本地会话凭据获得通过的SOAP请求,从而保持登录到一个办法? (请注意,即使在本地,我也无法控制身份验证方法,这是通过本地化的Apache mod进行处理的,该mod可以控制整个系统中任何用户的身份验证,涵盖了几十个我没有管辖权的部门。我查看了全局变量,并没有看到任何证书提示,但我可能会对PHP/Apache的一些基本安全特性有所da漏)。

2)有没有一种安全可靠的方式让PHP在二级登录后处理凭据,以便这些凭证可以使用一段时间(比如30分钟的会话?)。请记住,根据第一点,这些凭据是非常机密的,因此,应该没有简单的方法让某人捅过来并获得这些凭据以回显(或进入某些数据库以查看它们等)。

对不起,如果这听起来偏执。我不习惯处理安全凭证,除了一个简单的“这是你放入密码的地方......好,现在每个人都可以在会话的其余时间彼此了解,我可以回到输出有用的东西。”

即使链接到任何基本的安全功能将是一个有益的开始。

回答

4

创建您自己的过期会话。创建一个数据库表:

CREATE TABLE session (
    ID int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT, 
    Hash binary(16) NOT NULL, 
    User int unsigned NOT NULL, 
    Created timestamp 
); 

当用户第一次验证时,创建会话并返回Hash的十六进制形式。

后续调用不需要用户名和密码,只需要散列。比如说,5分钟不活动后,哈希将被删除。用户名和密码只传递一次,之后使用散列作为认证,并在一段时间不使用后过期。

0

为什么不自己设置一个cookie,在第一次soap请求之后有一个用户名/密码?你问一次然后存储在一个cookie中。然后,您可以设置超时时间并在用户登录时查询它。您可能希望在注销时删除该cookie。

该cookie只包含soap用户/密码。这样您就不必担心有人在服务器上戳动并找到其他凭据。这与用户每次输入它的效果相同,因为它始终以明文形式发送。您可以使用可逆哈希或简单的双向加密来混淆cookie中的用户名和密码。

+0

实际上,我在PHP会话安全在读了起来: http://phpsec.org/projects/guide/4.html 我最关心的是,密码是相当多的其他相同敏感数据,我需要确保没有人可以解码cookie或拦截会话。即使我很有可能使用某种密码并反转密码并阻止访问解密方法的任何http方式,但仍然会有代码,如果有人能够访问服务器,则会绘制路线图获取密码。 – Anthony 2009-06-08 23:19:11