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_Soap - Fatal编程技术网

通过PHP在服务器端保留登录凭据(安全可靠)

通过PHP在服务器端保留登录凭据(安全可靠),php,security,session,soap,Php,Security,Session,Soap,因此,我试图编写一个php SOAP客户端,它要求用户向远程SOAP服务器传递登录凭据。以下是设置/困境: 用户使用本地凭据登录到本地站点,并使用SOAP客户端进入页面 现在会提示用户输入远程Soap服务器的凭据,顺便说一下,这些凭据与通过POST表单进入本地站点(10次中有9次)的凭据相同 客户端在SOAP头中传递凭据和SOAP请求,客户端输出SOAP服务器响应 脚本结束时,用户将看到输出数据 现在,用户需要一些与原始输出相关的其他数据位。问题是,$\u POST变量现在早已不存在了。用户

因此,我试图编写一个php SOAP客户端,它要求用户向远程SOAP服务器传递登录凭据。以下是设置/困境:

  • 用户使用本地凭据登录到本地站点,并使用SOAP客户端进入页面
  • 现在会提示用户输入远程Soap服务器的凭据,顺便说一下,这些凭据与通过POST表单进入本地站点(10次中有9次)的凭据相同
  • 客户端在SOAP头中传递凭据和SOAP请求,客户端输出SOAP服务器响应
  • 脚本结束时,用户将看到输出数据
现在,用户需要一些与原始输出相关的其他数据位。问题是,$\u POST变量现在早已不存在了。用户必须在下一个请求中包含凭据。重复此操作,直到用户决定通过另一种方法查找数据更容易,并放弃使用酷炫的SOAP客户端

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

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

1) 是否有一种方法可以将本地会话凭据传递到SOAP请求,从而将登录次数减少到一个?(请注意,即使在本地,我也无法控制身份验证方法。这是由一个自主开发的Apache mod来处理的,它控制整个系统中所有用户的身份验证,覆盖了几十个我没有管辖权的部门。我查看了全局变量,没有看到任何凭据的提示,但我同意我只是对PHP/Apache的一些基本安全特性感到愚蠢)

2) PHP是否有一种安全可靠的方法在第二次登录后处理凭据,以便这些凭据可以使用一定的时间(例如,30分钟的会话?)。请记住,基于第一点,这些凭证是非常机密的,因此,不应该有任何简单的方法让某人四处走动,并让这些凭证发出回声(或进入某个数据库查看它们,等等)

抱歉,如果这听起来有点偏执。除了简单的“这是你输入密码的地方……很好,既然在接下来的会话中每个人都认识了,我就可以回去输出有用的东西了。”


甚至连一个指向任何基本安全功能的链接都会是一个有用的开始。

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


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

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


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

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

CREATE TABLE session (
    ID int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
    Hash binary(16) NOT NULL,
    User int unsigned NOT NULL,
    Created timestamp 
);
当用户第一次进行身份验证时,创建会话并返回哈希的十六进制形式


后续调用不需要用户名和密码,只需要散列。比方说,在5分钟的不活动之后,散列被删除。用户名和密码只传递一次,散列随后用作身份验证,并在一段时间不使用后过期。

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

CREATE TABLE session (
    ID int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
    Hash binary(16) NOT NULL,
    User int unsigned NOT NULL,
    Created timestamp 
);
当用户第一次进行身份验证时,创建会话并返回哈希的十六进制形式


后续调用不需要用户名和密码,只需要散列。比方说,在5分钟的不活动之后,散列被删除。用户名和密码只传递一次,散列随后用作身份验证,并在一段时间不使用后过期。

我实际上是在阅读php会话安全性:我主要关心的是,对于相当多的其他敏感数据,密码是相同的,我需要确保没有人能够解码cookie或拦截会话。即使我极有可能使用某种密码并反转密码并阻止任何访问解密方法的http方式,仍然会有代码,如果有人访问服务器,绘制获取密码的路线图。快速跟进:如果有人知道……是否可以通过会话变量使SOAP客户端保持活动状态,以便只有客户端对象具有密码?我知道这并不是更好,但它可能比将密码保存在指定的会话变量中要好。实际上,我正在阅读php会话安全性:我主要关心的是,对于相当多的其他敏感数据,密码是相同的,我需要确保没有人能够解码cookie或拦截会话。即使我极有可能使用某种密码,并反转密码和密码