2016-07-27 95 views
0

我正在写一个离子移动应用程序发送HTTP请求到一个Java servlet。 HTTP请求URL包含用户信息,并将用于更新后端数据库。但是我不希望除我的应用程序用户以外的任何人通过发送来自外部源的HTTP请求来弄乱我的数据库。用户无需登录即可使用我的应用程序,因此我无法验证发送请求的身份。到目前为止,我唯一想到的解决方案是发送一个密钥和请求,然后在servlet上进行验证。然而,这种硬编码的方式远非令人满意。什么会更好?还是我连接到后端错了?我接受所有建议。限制访问的Java Servlet

回答

1

如果您在不验证用户凭证的情况下更新数据,则任何人都可以更新它,因为它只是修改用户代理并嗅探有效负载中的秘密密钥,这与URL本身一样秘密。您将必须找出一种方法来验证连接,例如发送数据的哈希值以及使用数据发送的数据,使用在安装应用程序期间生成的唯一密钥以及生成的用户标识进行腌制,然后发送给你在安装过程中。然后,您可以将唯一密钥保存在您的数据库中,并且每当您收到请求时,都会对数据进行散列并匹配散列以确保它是从移动设备发送的。

0

根据我的经验,在发送一个头端密钥,以你的servlet,然后验证这个秘密是有效的是去一个很好的方式。

你可以存储有效的秘密名单(如果你有多个客户端),然后验证一个被包括在其中被发送到你的servlet的任何请求头。

另一件事要记住的是,如果你想沟通是安全的,你应该强制执行HTTPS请求使用(而不是HTTP),否则客户端秘密会以纯文本格式发送。这将使攻击者很容易看到秘密并在他们自己的请求中使用它。

+1

问题与静态的秘密是有一次甚至其中的一个被打破,整个操作是脆弱的。然后为了保护自己,您必须强制所有用户切换密钥,通常通过重新安装应用程序来完成,这本身就很痛苦。 HTTPS确实是需要的,但确定的攻击者可以绕过它。 –