2011-11-26 45 views
0

我正在考虑从登录页面传输登录名和密码时增加安全性。 我在互联网上发现了一个javascript md5函数,所以发送密码的第一种方法是使用POST方法发送md5散列代替密码。 据我所知,仍然有很多问题,该方法应该改进。 未存储数据库中的密码,只存储md5散列(其他函数也用于使其复杂化)。 但是,我的问题是:从托管服务提供商更喜欢ssl加密是否有意义或更好?它每年花费大约100美元(假设对于我的问题来说价格很合理),而不是重新发明轮子。 ssl的负值(如果我没有错的话)是:如果登录部分位于主页面上,主页面将加载速度较慢(尽管雅虎登录页面使用https加载的速度相当快),并且任何用户都将在浏览器中看到https字符串(这不是坏事,但它是好?)安全登录页面:javascript md5函数vs SSL,如果登录块位于主页面

是怎样的主意,用(无SSL): 1)wher中,MD5用户登录(密码)发送的,而不是他的真实密码 2)服务器接收md5(密码),使其成为md5(md5(密码)+'kjhgkjhg'),并与存储在db中的散列进行比较。 db为所有用户存储md5(md5(密码)+'kjhgkjhg')散列值。 因此,如果md5(密码)被嗅探,它将无助于获取md5(md5(密码)+'kjhgkjhg'),因为'kjhgkjhg'未知。 这是一个很好的方式来保证登录页面的安全吗?

谢谢。

+1

是的,它确实更有意义。使用SSL *至少*。并且不要依赖Javascript来处理服务器获取的页面。不要使用'md5',它被认为对于密码哈希来说太弱。 –

+0

您是否建议从主页面中删除登录块,然后使用http作为主页面并使用https登录页面(即主页面中的另一页面)...谢谢。 – Haradzieniec

+4

认为向服务器发送MD5哈希比发送纯文本密码要好很多。见:http://stackoverflow.com/q/5724683/476 – deceze

回答

1

您将需要浏览器创建哈希MD5(密码+随机()),并发送而不是MD5(密码),以便将来没有人可以使用哈希。然后,您需要在服务器中使用明文或双向加密的密码,并在服务器端执行相同的操作并对结果进行比较。您需要将发送到浏览器的随机字符串保存在服务器中,以便相同的随机数不能再次使用。这会起作用,但是。

  • 有人可能在中间劫持会话。只需捕获cookie并使用相同的IP,服务器就完全没有防御能力。
  • 没有SSL用户无法知道他/她已经联系了正确的服务器,并且内容没有改变。
  • 用户的网站地址和流量仍然可以由中间的人或他/她的计算机上的特洛伊木马程序读取。
  • 通常浏览器密码保存失败。

但是。 SSL往往很慢,那些证书过期并破坏了一切。

+0

谢谢。仍然只能理解为80%。 1步:在访问该网站创建的唯一随机字符串时,它位于用户计算机和数据库中的隐藏字段中。用户登录。用户ID + md5(密码+随机())正在发送到服务器。然后,你说,ip和cookie不好比较。所以,我们拥有的是db中的随机活动数字列表,并接收md5(密码+ random())。如何找到db中的随机数是否对应于md5(password + random())?谢谢。 – Haradzieniec

+0

访问服务器时,服务器创建随机数并将其存储为例如会话。这是在登录之前。这个随机数发送到浏览器并用于MD5()。 – anttir

+0

浏览器是否发送md5(随机)和md5(密码)或md5(密码+随机)?如果服务器收到md5(密码+随机),它不能比较这个字符串与随机列表...即使我们保持密码,而不是它的散列在分贝...我仍然不明白:( – Haradzieniec

1

使用SSL。关于这一点真的没什么可说的。如果您尝试重新发明安全身份验证,您将会在错误的

您建议不使用SSL的两个原因是成本和速度。

费用:正常SSL证书和EV SSL证书的安全性没有区别。 EV代表(E)扩展(V)alidation,这意味着证书颁发机构花费更多时间检查您是否是您自称的人。如果成本有问题,请获取更便宜的SSL证书。

速度:这些日子,由SSL协商引起的速度放缓相当小。我刚刚做了一个快速测试,向yahoo.com发送HEAD请求,并且在1000个SSL连接中平均得到0.2秒,在1000个非SSL连接中平均得到0.1秒。如果您的页面请求花费0.2秒,那么SSL延迟可能会对您造成影响,但如果他们花费了整整一秒的时间,则其他原因会导致速度缓慢。

如果您搜索如何存储和传输密码http://security.stackexchange.com你会发现很多好的建议,如何安全地做到这一点。