使用哪种方法更好用于登录表单,是doGet()还是doPost()?

3
我遇到了很多网站,它们使用doget()或dopost()方法来处理登录表单中输入的用户名和密码字段,但在我看来,当我们使用doget()时,我们必须自己加密用户名和密码字段,因为它们会附加到URL上,而dopost()则不需要(好像工作量少一些..哇)。
但是,我有点担心使用dopost()是否安全,因为用户名和密码字段是高度敏感的数据。
请问有人能告诉我在登录表单中使用两者之一的优缺点吗?

2
在我看来,你应该使用doPost()方法。同时,在使用doPost()方法时,你还需要加密密码。更准确地说,你需要使用SSL。 - Harry Joy
@Harry 好的,谢谢您的快速回答,但是我不明白为什么我需要加密密码,即使我通过dopost将其发送到请求正文中...我的意思是问“它是否容易被黑客攻击”? - Nav
我希望有一个系统,可以告诉我们为什么人们在问题绝对真实的情况下没有指明原因就进行了负面评分 >:( - Nav
如果您在网络上发送未加密的内容,您必须始终假定有人可能会拦截它。 - James M
2个回答

2
POST比GET的开销更大(即使我们诚实地说,这只是微不足道的,但所有这些都会累加),但它不会成为URL的一部分,因此不能被像GET一样随意观察者看到用户的输入 - 而GET可以。但是,如果您没有使用任何加密,两者都可以很容易地在网络上被拦截,因此都是不安全的... GET更糟糕,因为它可以被任何人阅读,而无需有意拦截密码。
如果您使用GET,则用户可以通过更改URL轻松修改输入,这可能是好事或坏事,您必须根据具体情况进行决定。用户无法轻松修改POST。
诀窍是在发送数据之前加密任何密码或敏感数据。这样,如果数据包被拦截,就几乎没有风险,由于您已加密了字符串,因此如果有人在用户旁边读取它,也不会有影响...因此,您可以使用GET并节省一点开销,代价是更长,不太美观的URL。在这个阶段,两者都不比另一个更安全。
在理想的安全世界中,您应该使用带有SSL的POST,以便URL中没有任何东西可以轻松地被拦截,并且拦截到的任何内容都不能轻松使用。

@John 还有一件事..使用SSL,我不是必须从Verisign或其他公司购买SSL证书吗??有没有替代方案? - Nav
我在理想的情况下说过;-) 在没有SSL的情况下,加密绝对是可能的。在企业环境中,您几乎总是希望使用SSL,因为它可以增强对公司的信心,但Java内置了足够强大的加密功能。从Cipher、SealedObject和Key类开始查看(虽然可能有更适合的替代方案)。 - Jon Story

1
  1. 你应该使用doPost()方法,因为这个方法不会将你的用户名和密码添加到URL的末尾。
  2. 如果你要使用doGet()方法,它会将你的用户名和密码附加到URL的末尾。所以它不安全。我建议你使用doPost()方法,它更安全。 如果你想要更高的安全性,你还可以使用SSL(安全套接字层)。

直到我看到一些大公司使用doget而不是dopost时,我也这样认为。例如Facebook和Orkut,如果你注意到它们也使用doget,但查询字符串肯定是加密的。所以,我想知道是否有理由这样做? - Nav

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接