我开发了一个 android 应用程序,它请求 REST 服务执行操作!
我的问题是:
- 如果有人跟踪请求和响应,他可以从标头中获取令牌吗?
- 我应该在哪里存储令牌在 android 客户端?
- 如果我将令牌存储在 SharedPreferences 和用户访问权限之类的地方,他可以向服务器发送虚假请求!例如,我有用于提交分数的控制器:“ http://domain.com/api/score/add ”,用户可以在标头中使用令牌发出请求并发布分数数字并轻松为自己提交分数!
我开发了一个 android 应用程序,它请求 REST 服务执行操作!
我的问题是:
如果有人跟踪请求和响应,他可以从标头中获取令牌吗?
如果攻击者处于执行 MitM(中间人)攻击的合适位置并且能够拦截和查看请求,那么是的,他们可以从标头中获取令牌。为防止这种情况,请确保正在使用的 REST 服务正在使用 SSL/TLS。这将防止中间人攻击和重放攻击。REST 服务还必须确保这些令牌在用户注销后在服务器端正确失效,并且应该存在与这些令牌相关的硬会话超时。
我应该在哪里存储令牌在 android 客户端?
您可以将它们存储在应用程序的 SharedPreferences 中。阅读此答案以获取更多详细信息。
如果我将令牌存储在 SharedPreferences 和用户访问权限之类的地方,他可以向服务器发送虚假请求!
是的,用户可以使用自己的会话令牌来做到这一点。这正是令牌的用途。就访问受限控制器而言,服务有责任确保访问控制在服务器端是正确的,并且只允许用户对特定端点执行受控请求。
问题是,如果攻击者获取了您的有效会话令牌,他们将能够在应用程序上冒充您。但是,您只是通过在任何地方使用 SSL/TLS 并确保应用程序不会以任何方式(例如,在请求 URL 中)泄漏会话令牌,从而使他们的任务变得困难。