我有一个简单的login表单,用户input用户名和密码。 当php通过POST接收到variables时,它将密码encryption为md5,然后将其与数据库logging进行比较。
我的问题是:在发送variables之前,在浏览器中用javascriptencryption密码会更安全吗? 我知道这不是一个万无一失的方法,但会阻止人们networking嗅探我的密码? 或者这是否会以任何方式使密码更脆弱?
谢谢。
顺便说一句,我将用于encryption到MD5的脚本在这里: http : //www.webtoolkit.info/javascript-md5.html
在通过电线发送之前使用JavaScript来散列密码是我期望的最less的。 如果你使用CRAM-MD5 , HTTP Digest或者SSL (专家花费数千小时的时间来倾听这些协议的安全意义),情况会更好。
你绝对要用盐 。 如果你不使用彩虹桌很容易扭转密码。 一个非常简单的盐,运行相当好,让服务器发送一个随机盐与页面。 MD5的密码,然后把MD5的第一个哈希和盐一起。 在服务器端,您可以存储MD5密码,然后在存储的哈希和页面上运行一个快速的MD5; 比较和authentication适当。 这种盐被称为nonce 。 你还应该在原始密码和存储在服务器上的密码中添加一长串盐。
所以一个“好”的path(缺lessSSL和上面提到的其他)是:
A = MD5 ( Password + Realm) B = MD5 ( A + Nonce)
通过电线发送B. 保持A存储在服务器上。 当首先设置A时,使用简单的可逆encryption,如ROT或XOR。 就我个人而言,我会考虑一些不负责任的事情,因为如此多的用户愚蠢地使用完全相同的密码在一切附近( 甚至杰夫 – 网站的创始人 – 已经这样做 )。
不,不要这样做。 强制在login屏幕中使用SSL,然后您将知道发送时用户名/密码是encryption的。
然后,当您的PHP应用程序收到密码时,它可以MD5或SHA1散列密码并存储。
要login,散列收到的密码,并与散列存储的密码进行比较。 如果它们匹配,则允许用户通过。
顺便说一下,为了防止你的密码数据库的字典攻击,你会希望在哈希之前“密码”的密码。 参见: http : //en.wikipedia.org/wiki/Salt_(cryptography)
如果你在你的哈希上使用盐,嗅探器可以很容易地访问你的页面,并从你的JavaScript获得你的哈希值。 而且, md5并不是完全安全的 ,因为它不是防撞的。 所以不要这样做,只要使用SSL,如果它真的很敏感。
人们嗅探networking并不安全。
只要想想,当用户需要连接在那里JavaScript密码并将其发送到服务器。 服务器将其与数据库进行比较。
嗅探器只需要嗅探密码并将其发送到服务器,这样就像明文密码一样安全。
正如其他人所说,我build议SSL / TLS隧道build立连接到您的服务器。