【问题标题】:Security through different programming language通过不同的编程语言实现安全性
【发布时间】:2016-06-22 10:31:47
【问题描述】:

有什么方法可以通过不同的编程语言检查登录状态? 现在,我使用 ajax 在登录过程后同时启动三个会话(同名)。

目前,login.html 表单处理三个文件:login.aspxlogin.asplogin .php 但它似乎太慢而且太奇怪了。我正在将同一家公司的三种不同服务合二为一,在 mysql 中重新构建用户和其他公用表后,一切似乎都运行良好,但我真的很害怕安全漏洞。

只是为了让你知道,我必须在任何 ajax 回调之前检查登录会话状态,所以如果用户正在通过 Ajax 调用 PHP 的 ASP 页面上工作,可能是会话在 ASP 上仍然处于活动状态,但在 php 文件上已过期。

任何一次检查所有的有效方法?我也可以接受 cookie 解决方案,但如何使其在 php、asp 和 .net 之间具有可读性?

【问题讨论】:

  • 为什么不让所有人重定向到一页? (login.aspx)
  • 绝对是一个 XY 问题 - 让您的所有身份验证都通过一个中心点,使用您喜欢的任何语言
  • @Aristos 为什么?我的意思是,我等待 login.aspx、login.asp 和 login.php 的回答,然后我进行了重定向。
  • @Steve 你能说清楚点吗?对于所有服务,我将所有用户放在一张表中。你说**经过一个中心点**是什么意思?
  • 你肯定不明白我的建议 - 让你头脑清醒一下。你不需要 3 页 - 你只需要一个

标签: php jquery asp.net ajax asp-classic


【解决方案1】:

对我来说,这听起来像是单点登录。让我们尝试拆分问题。

有什么方法可以通过不同的编程语言检查登录状态?

您对所使用的语言并不真正感兴趣。任何语言,只要给出相同的信息和算法,都可以成功解码相同的加密数据。我猜你会遇到问题,因为 PHP 在这一点上的应用程序逻辑与 ASP 的不同。 所以对于第一点,你可以

  • 在所有应用程序中实现/规范化相同的会话检查逻辑。这可能是不可行的,因为您可能在这里使用 Laravel,而在其他地方使用 ASP.Net,两者在这方面可能略有不同。如果可以,请这样做,或者...

  • 查看 JSON Web 令牌。我不会详细介绍,但这些或多或少是为了解决这类问题而设计的。它们也很容易处理,但请注意,在使用它们进行用户身份验证时需要注意一些方面。

[...] 只是为了让你知道,我必须在任何 ajax 回调之前检查登录会话状态,所以如果用户正在处理通过 Ajax 调用 PHP 的 ASP 页面,可能是会话仍在在 ASP 上处于活动状态,但在 php 文件上已过期。

不是那种人,但这里有些概念有些变形。会话不会在文件上过期;它们通常设置有给定的到期时间和给定的。所以一般来说,从 PHP 应用程序打开的会话并存储在 cookie 中,然后从 ASP 读取的会话不应更改,因为这两个应用程序的会话处理逻辑之间不存在差异。

任何一次检查所有的有效方法?我也可以接受 cookie 解决方案,但如何使其在 php、asp 和 .net 之间具有可读性?

对于我上面建议的两种解决方案,尤其是对于 cookie 解决方案,重要的是您让应用程序在会话处理方面完全一致。虽然这对于 JWT 来说是微不足道的(因为在应用程序端几乎没有任何逻辑),但如果身份验证逻辑来​​自其他人的代码(如在框架中),这对于 cookie 可能会更难。 我还没有问过单点注销,在这一点上我不敢问:)。但这些是一些指导方针:

  • 如果使用 cookie 路由,请注意 cookie 的域。 cookie 通常对来自网站域 (name.com) 的每个请求都有效,但您的某些应用程序可能在子域下(例如 phpapp.name.com)。在这种情况下,请确保从给定应用创建的 cookie 对 整个 域有效,而不仅仅是子域。并使应用程序在同一域下的子域/页面上可用。 Cookie 不能跨域工作,您必须处理这个问题,因为 cookie 域策略是在浏览器级别执行的。

  • 启动三个 AJAX 调用意味着触发三个登录过程。我想所有这些都将在未来的某个时候终止,所有这些都将存储/重写 cookie。如果应用理解相同的 cookie,则您必须在其中一个上打开登录过程。这将存储 cookie,然后会自动从第二个应用中的页面中选择应用,让您无缝过渡到第二个应用中的记录状态。

  • JWT 通常需要一些 JS 工作,您可能会喜欢这样,因为可以在所有应用程序中轻松加载相同的脚本。另一方面,您可以确定处理 JWT 的不同服务器库对您的工作方式相同,从而确保兼容性。

就个人而言,我会研究 JSON Web Tokens。

【讨论】:

  • 您好,非常喜欢您的回答,我将开始阅读有关 JSON Web 令牌的内容。唯一的问题似乎是我必须在 IIS 上设置 nodeJS,这是我几年前告诉公司的……但是……你知道 o.O
  • @Vixed .. 是的,我知道 -.-' 已经离开 IIS 好几年了。尽管如此,看起来你可以不用 node.js?我确定有an extension,或者你可以自己implement it(如果我们说的是.NET)
【解决方案2】:

您可以开发自己的会话提供程序,将数据存储在单独的位置(例如,在数据库或文件中)。然后,您需要做的就是在每个环境中编写一些代码来处理来自该提供程序的会话信息。因为您只使用一个源来存储会话信息,所以您的任何环境之间的同步都不会出现问题。

如果需要,您可以使用 Web 服务在每个环境和会话提供者之间交换会话信息。每个应用程序都可以使用安全连接从该会话 Web 服务获取和设置有关会话的信息。

【讨论】:

    【解决方案3】:

    我认为您可以做到这一点!您可以创建将数据存储到数据库中的提供程序。然后编写一些很酷的代码来管理您的提供商。您还可以使用 webapp 或服务。每个服务都使用安全性来获取和放置信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-12
      • 2010-11-23
      • 2010-09-09
      • 1970-01-01
      • 2010-11-04
      • 2011-10-02
      相关资源
      最近更新 更多