我正在查看livehttpheaders plugin for Firefox并决定测试我的登录页面。我注意到它里面显示的参数包含我的登录名和密码。例如:
username=sarmenhb&password=thepassword&submit=Login
用简单的英语。
我在其他网站上看不到这一点。
我能做错什么?我认为这是一个安全漏洞。登录页面,只需验证并登录用户即可。所有字段都通过mysql_real_escape_string
(如果相关)。
答案 0 :(得分:8)
信息必须从客户端获取到服务器的方式。如果您担心安全问题,请使用SSL。
即使您在Javascript中执行MD5哈希,此也无法帮助,因为将哈希值提交到登录页面是微不足道的,并且哈希有效地成为密码。所有内容都是纯文本,直到它们或传输加密为止。 POST变量,使用SSL 。
从下面的评论中添加。您可能看不到其他站点的标头,因为它们可能使用AJAX,POST方法或其他客户端机制进行身份验证。
答案 1 :(得分:1)
这让我想起了一个大城市中的某个建筑物(我相信在其他地方还有其他建筑物),他们有一个基于网络的建筑礼宾接口。居民可以登录网站(通过http)并指定(在其他情况下)谁可以在他们缺席的情况下进入他们的公寓进行维修等。我确信整个事情都是由某人的侄子编写的,他是一个“大师”。
我确信这是good enough。
答案 2 :(得分:1)
您正在为您的网站而不是其他人看到它,因为livehttpheaders显示了GET请求的URL,但没有显示POST请求的内容。
通过GET请求发送登录信息是发送POST的一个小额外安全漏洞,因为GET请求的URL通常记录在各个地方,而几乎没有人记录POST内容。有权查看网络服务器日志的每个人是否都有权知道CEO的密码?
然而,正如其他人所指出的那样,除非您使用https:登录,否则无论您使用GET还是POST,数据都会以纯文本形式通过网络传输。这几乎总是坏事。
尽管如此,作为一种中间措施,我会更改你的应用程序以发送用户名和密码作为POST,而不是GET,这样你就不会在你的网络服务器日志中存储用户名和密码 - 使用https是没有用的如果您正在执行某些操作,然后将用户名和密码写入服务器上受保护程度不足的日志文件,请通过电线。
答案 3 :(得分:0)
当您使用http并提交表单时,表格内容将通过“明确”的电子邮件发送,如您所见。当表单提交包含凭据时,是的,您有安全问题。
您的备选方案包括:
如果他们不是非常小心,后一种方法往往会让人们陷入困境,因为任何关心javascript的人都可以完全看到加密凭据的机制。
答案 4 :(得分:0)
HTTP实时标头也显示POST请求。 Post以与GET相同的方式发送数据,但唯一的区别是变量在GET中的url本身中传递,但在POST中它们被附加到HTTP头。
为了获得更好的安全性,请使用JS中的加密(仅限密码或令牌+密码)。但是仍然可以使用彩虹表来攻击MD5或任何其他散列技术。
SSL是实现高安全性的唯一途径。