2017-06-06 282 views
0

我正在使用基于令牌的身份验证访问我为我的网站设计的一些原始Web API。在登录时,用户名和密码将发布到登录API,并且它会生成一个具有唯一密钥的令牌,并且密钥将存储在数据库中。在随后的每次调用中,令牌都随请求一起发送,并在服务器上使用密钥进行验证。保护基于令牌的身份验证系统的令牌

我正在使用Web应用程序来使用此API服务并向用户提供前端。 Web应用程序使用HTML/Bootstrap/JQuery设计,后端使用php编写。

我已成功测试我的应用程序和基于令牌的身份验证工作。但是,我有一个问题。我发现用户ID和令牌直接显示,只在浏览器的地址栏上使用url编码。现在

http://hasconpanel.ckoysolutions.com/hasconpanel.php?inputs={%20%22username%22%20:%20%22Debopam%20Parua%22%20,%20%22uid%22%20:%20%2220170520193421DP%22%20,%20%22token%22%20:%20%22Sa2pHyooWPoI79vfvJzLlw7UO%252B2p5hOpBttkEq7LQ%252BjAGm9XEmxfhLAcnJoLbqrsXCp75%252BG1M7nEUoCgsDVbIQ%253D%253D%22%20,%20%22list_of_devices%22%20:%20[{%22device_code%22:%22b8:27:eb:f1:b3:0f%22,%22device_name%22:%22First-Pi%22}]%20} 

,如果该地址被复制,或者假设浏览器是由恢复先前的会议,不管是谁试图访问它,他们得到的条目。特别是在公共计算机中心的情况下,如果任何人使用他们的凭证访问我的Web应用程序,并且在杀死浏览器之前忘记注销,令牌系统似乎失败了。无论如何保护令牌像加密它?或者某些情况下,应用程序在浏览器/浏览器选项卡关闭的情况下不存储参数,或者至少不会将其显示在地址栏中?我曾想过在每次请求时都会创建一个新的令牌,但它会大幅降低系统速度,所以我想避免它。

请建议一些方法来解决这个问题。

在此先感谢。

编辑: 解释系统是如何工作的,现在:

的API系统托管在一个共享服务器的主域名,并应用在一个子域主持。主域还承载了几个从家中安装的几个树莓派中调用的web服务。

这是它是如何工作的,登录是从主网站进行的,并且在成功登录后,将通过带有用户ID,令牌和用户工作设备列表的get调用来调用Web应用程序。提供检查是为了防止在没有这三个参数的情况下访问应用程序页面。在新加载时,用户可以从下拉菜单中选择设备。现在,这些工作设备中的每一个都可以运行三个独立的系统。因此,在选择设备时,应用程序会再次发出获取呼叫,并将选定设备作为参数与前三个参数一起添加。这会在地址栏上显示令牌和uid。

+0

您可以使用发布API请求的请求。 –

+0

只要他通过HTTP –

+0

运行,发布不会保护他,现在可以获得免费的SSL证书,所以确实没有理由不使用https。如果用户需要使用电子邮件和密码进行注册,则需要使用HTTPS:https://letsencrypt.org/ –

回答

2

基于令牌的认证在网络世界中非常标准。细节各不相同,但你试图做的肯定不是疯狂的。但是,您的安全问题是有效的,并且存在许多可能的解决方案:

  1. 专门使用HTTPS。这将保护您的令牌不被用户和您之间的每个人轻易读取。其实,不管别的什么。目前,HTTPS应该被认为是默认的安全目的:假装HTTP已被弃用。
  2. 将令牌移动到请求的标题中,而不是URL。只要您使用HTTPS,从安全角度来看,这实际上并不会改变任何事情,但它对于行业来说是相当标准的。它还会将令牌保留在浏览器历史记录之外。

奇怪的是,您在浏览器地址栏中显示了一个URL。我希望客户端应用程序能够通过ajax完全发出请求,这意味着地址栏中应该没有任何东西。您可能需要更详细地说明此应用程序的工作方式。我怀疑你需要重构,这样你的任何应用程序URL都不会在地址栏中出现,而是只能通过AJAX请求进行操作。

不过,HTTPS是最重要的部分。 DNS查找后的整个交易将被安全传输,因此令牌不会被中间人窃取。这是你必须采取的最重要的步骤,以确保它。如果您不使用HTTPS,那么您最好将它广播给全世界。当然,如果您正在使用查询参数中的令牌向网址发送非Ajax请求,那么该令牌将在浏览器的地址栏和历史记录中可见。再次,避免通过仅使用ajax请求并将cookie放在标头中。

一旦HTTPS与ajax-only请求一起就位,盗用令牌的机会就会小得多。不过,它可能发生(特别是通过XSS攻击),所以请熟悉“纵深防御”的原则。此外,您可以采取措施尝试检测被盗的令牌并使其失效。事情是这样:

  1. 无效令牌(用户重新登录),如果IP地址的变化(虽然这可能会影响移动用户,这可能是不可取的)
  2. 如果用户无效令牌代理更改(尽管可能会被欺骗)
  3. 强制服务器端最大会话长度
  4. 确保并要求用户在需要更改电子邮件/密码时重新进行身份验证。

这些只是我的头顶几个建议。再次,这是一个非常标准的问题,所以谷歌将成为你的朋友。

+0

您好, 感谢您的回复,并对最近的回复感到抱歉。 我会尽我所能解释系统的工作。我正在编辑我的帖子以添加信息。 –