Java 在POST请求中输入密码是否安全?
我正在开发web服务 这些服务是rest服务,由移动应用程序使用 例如,如果用户想要登录,他/她必须调用此链接 mySever:myPort/login 在请求的帖子中,他们使用自己的密码和用户名 这条路安全吗 请注意,在调用web服务之前,我将密码更改为sha256Java 在POST请求中输入密码是否安全?,java,security,rest,Java,Security,Rest,我正在开发web服务 这些服务是rest服务,由移动应用程序使用 例如,如果用户想要登录,他/她必须调用此链接 mySever:myPort/login 在请求的帖子中,他们使用自己的密码和用户名 这条路安全吗 请注意,在调用web服务之前,我将密码更改为sha256 如果这种方式不安全,您可以建议其他选项吗?仅当您通过SSL进行所有通信时。由于您没有使用SSL,您应该使用一些方法来避免重播攻击。如果你只是对密码本身进行散列,那么有人可以很容易地捕获散列并自己发送。实现这一点的一种方法是使用发送
如果这种方式不安全,您可以建议其他选项吗?仅当您通过SSL进行所有通信时。由于您没有使用SSL,您应该使用一些方法来避免重播攻击。如果你只是对密码本身进行散列,那么有人可以很容易地捕获散列并自己发送。实现这一点的一种方法是使用发送给用户的nonce,并在散列之前将其添加到密码中。这个nonce应该是唯一的,例如,您可以使用时间戳 因此,您可以使用hashpassword+nonce代替hashpassword。然后您将进行比较,因为您都持有密码和nonce。使用HTTPS! 如果您使用HTTP并确保验证服务器证书,您将相当安全 如果您制定了自己的身份验证协议,则很可能会产生漏洞
如果您只是发送一个密码散列,那么您没有添加任何安全性;攻击者可以重播相同的散列。亲爱的Tim先生,你是说https吗?很遗憾,它不在https上,你能建议其他选项来保护我的服务器吗?@user3110137:你需要使用https。安全是硬的;如果您尝试创建自己的SSL版本,您将失败。特别是,您必须验证服务器证书。对于您的初始测试和类似的测试,您不需要支付任何费用-使用自签名证书,并且您只需要在站点准备就绪时购买一个。@TimB如果我必须使用ssl,那么我应该使用公钥和私钥,这些密钥可以通过金钱获得吗?或者我可以使用自己的密钥?大多数登录表单都在这样做。这个过程本身并不是不安全的,但是如果任何人在公共wi-fi热点上嗅探网络,这显然很容易,而你在没有加密SSL的情况下发布你的数据,这可能会暴露出来,因为其他类似cookie(包括会话cookie)的东西可能会像拥有密码一样有害。。。因此,关键是使用SSL,而不是散列密码…因此,我可以使用我自己的公钥和私钥,我可以从VS生成,或者从受信任的站点购买它们很重要?@user3110137:如果您生成自己的密钥对,您可以直接将公钥嵌入客户端应用程序,而不是使用PKI。但是,如果有人偷了钥匙,您将无法撤销它。