我开始写一个小的Web应用程序,并已开始考虑如何保护登录(仅用于管理)。
如果我可以,我会安装一个CACERT或自签名的SSL证书,因为现在我是唯一一个登录,但我的主机是不是太宽松。
是否有用于固定现场无任何SSL选项合理? 我一直在思考的身份验证选项:
实现JavaScript中的盐渍哈希。 当登录加载页面时,产生盐的服务器端。 它发送到客户端中明确,并将其存储在一个会话变量。
摘要式身份验证。 我刚刚发现这个想法SO浏览,而且它可能有很多比我自己的滚动权威性更加合理。
OpenID的。 这是一个开放的标准,不需要密码(我可以“劫持”我的OpenID提供商的SSL加安全的登录过程),但我不知道的OpenID如何运作或安全性如何。 (需要研究,例如,可以在OpenID身份验证重播?)
所有这些问题是:
- 会话可以被劫持
- 只有登录是安全的,其他的一切都是在明确
我能想到的登录后确保应用程序的唯一选项是一些恶心的JavaScript和PHP发送ASCII加密斑点来回。 我不想这样做。
是否有任何加密(用于pageloads和信息),可以在选择我的服务器端脚本语言没有祝福或我的主机的参与来执行,但是会被浏览器支持? 可以从会话劫持(几乎)无SSL保护?
什么,你会在这样的情况呢?
你可以无需实施防止窃听保护安全的身份验证。 例如,您可以防止他人发送请求,即使他们可以阅读您的要求的内容。 如果你需要防止窃听,我建议只去什么地方,你可以使用SSL。
如果你只需要简单的身份验证没有真正的安全,你的供应商可能会支持HTTP基本。 这(具有良好的设计,限制了能力和备份一起)是一个合理的过渡解决方案,而你担心其他问题。
为了验证你的身份,OpenID的不能播放。 每个认证序列签署。 不过,OpenID的本身仅允许您与服务器建立你的身份。 它不会让你签或以其他方式进行身份验证的请求。 OAuth的会,但它需要传输加密的协议的一部分。
你可以签订一个共享的秘密每个请求。 这会阻止攻击者提交或重放的请求,但请求本身仍然可以通过窃听者读取。 参见亚马逊AWS认证(其包括客户机库)或Flickr的认证的文档。 的基本协议是:
- 需要时间戳(和可能是一个随机数)作为请求的参数
- 规范化,排序连接所有请求参数
- 与URI,主机,动词等串联
- 与密钥散列
- 在标头中发送的散列与请求
- 服务器不相同,比较签名
如果你接近这个作为与不同的身份验证和加密方法,这是伟大的玩一个有趣的方式,但最便宜的,最简单的解决办法是让一台主机,你可以安装一个SSL证书。
如果您在会话注册的远程IP地址,它不能被劫持。 有人试图用不同的IP地址,使用会话可以很容易地检测出来。 PHP会话使用默认(我猜是不是optionable)。 简单而有效的解决方案。