我正在编写一个将HTTP请求发送到Java servlet的Ionic移动应用程序。 HTTP请求URL包含用户信息,将用于更新后端数据库。但是,除了我的应用程序用户之外,我不希望通过从外部源发送HTTP请求来搞乱我的数据库。用户无需登录即可使用我的应用程序,因此无法验证发送请求的人员身份。到目前为止,我想到的唯一解决方案是发送一个密钥和请求,然后在servlet上验证。然而,这种硬编码方式远非令人满意。什么是更好的方式?还是我连接到后端错了?我对所有建议持开放态度。
答案 0 :(得分:1)
如果您在不验证用户凭据的情况下更新数据,那么任何人都可以更新它,因为它只是修改用户代理并嗅探有效负载中的密钥,这与URL本身一样秘密。您将不得不找到一种方法来验证连接,例如,使用您在数据中发送的数据的散列,使用您在应用程序安装期间生成的唯一密钥进行盐析,以及生成的用户ID,并将其发送到你在安装过程中。然后,您可以在数据库中保留唯一密钥,并且每当收到请求时,您都会散列数据并匹配散列以确保它是从移动设备发送的。
答案 1 :(得分:0)
根据我的经验,将标头中的客户端密钥发送到servlet,然后验证此密钥是否有效是一种很好的方法。
您可以存储有效机密的列表(如果您有多个客户端),然后验证是否有一个包含在发送到您的servlet的任何请求的标头中。
要记住的另一件事是,如果您希望通信安全,则应强制使用https请求(而不是http),否则客户端机密将以纯文本形式发送。这样,攻击者就可以轻松查看秘密并在自己的请求中使用它。