我正在构建一个移动应用程序,其中包括用户在应用程序中执行各种操作,我开始使用本地存储在设备上的令牌验证应用程序内的所有用户操作。我最担心的是,任何人都可以嗅探网络并查看我在应用程序中发出的http请求,从而代表真实用户发送虚假请求。像这样:
http://mywebsite.com/postmessage?user=abcd&token=35sxt&msg=Hi
现在,我正在使用HTTPS,没有人可以看到我的域名,也没有人可以看到正在发送的数据。所以我倾向于一起摆脱令牌并做到这一点:
https://mywebsite.com/postmessage?user=abcd&msg=Hi
我认为我不再需要令牌了吗?它们的全部目的是确保没有人可以在未经授权的情况下代表另一个用户进行操作,现在我仍然使用令牌似乎毫无意义。我错过了别的什么吗?
答案 0 :(得分:3)
首先,你是正确的,在URL(或其他任何地方)中使用令牌是对HTTP的安全风险。但是,现在您使用的是HTTPS,无论您是在URL中使用API令牌还是以其他方式传输它都无关紧要。 URL应该与事务的任何其他部分一样安全。我说“应该”,因为在实践中,您的内部基础架构可能会执行日志记录,指标收集或报告,这比您想要的更容易地显示URL。客户可以将访问过的URL(但不是其他信息)提交给自己的日志记录系统或Google等智能搜索服务。但对于大多数用例和大多数配置,这不是主要问题。
但是你的问题听起来像是在讨论不是从URL中删除令牌并将其添加到HTTP头或其他方式,而是实际上完全删除了令牌概念。
那么您应该问的是,HTTPS的特殊之处是什么使得令牌不必要? HTTPS可以保护通信,但不会对客户端进行身份验证。除了非常不寻常的配置外,任何人都可以通过HTTPS连接并发出命令,除非您有一些身份验证方法,否则HTTPS将无法保护您免受未经授权的访问。如果您使用cookie进行身份验证,或者您通过HTTP标头传递令牌(这实际上是我更喜欢在可能的情况下处理令牌),那么您需要进行身份验证,并且您不需要令牌。如果您没有任何其他形式的身份验证,并且您需要在网站上进行安全身份验证,那么您确实需要令牌。
答案 1 :(得分:1)
HTTPS主要用于确保您与您打算使用的网站进行通信并加密通信数据,这样即使有人拦截您的数据,对他们也毫无意义。
例如如果您在亚马逊订购并付款, HTTPS将确保:
通过HTTPS进行通信时,浏览器验证服务器数字证书以确认其身份,然后在服务器和浏览器之间交换密钥以加密浏览器和服务器之间的数据流。
默认情况下,HTTPS不会对客户端进行身份验证。因此,如果您有特定于特定用户的某些操作,则仍需要来自客户端的身份验证令牌。 但是如果令牌在URL本身作为查询参数传递,那么它仍然会暴露给攻击者,所以通过HTTPS在cookie中发送令牌。
还建议您将Cookie标记为安全,以确保Cookie仅通过安全(https)连接发送,而不是通过http发送,因为它可以显示用户详细信息。
希望它有所帮助。