Mia*_*rke 15 security encryption gwt authorization client-side
我正在我的gwt应用程序中实现授权,目前它以下列方式完成:
现在.令我困扰的是,我正在将密码发送到服务器,我一直认为如果我使用的应用程序与我一起使用,我会不会很高兴(use-for-所有类型的密码,但在客户端加密它并不能真正赢得任何东西,因为攻击者可以使用散列密码,因为它们是明确的密码.
我一直在谷歌搜索这一点,看来互联网是非常一致的 - 显然从客户端密码加密没有任何好处.这个,这个和这个是讨论和网页我来用的只是几个例子,但也有很多很多,都说同样的事情.
鉴于这一切,这个问题可能看起来有点不必要,但我希望某个地方,有人会为我提供另一个答案.
如果ssl在这一点上不是一个选项,我可以做些什么来缓解我的想法呢?有什么可以做的,或者实施某种客户端加密服务器解密方案只是耗费时间的虚弱死马?
对于登录,即使在此时,SSL也应该是您的选择.如果它仅用于登录,则您不需要昂贵的SSL服务器场,但至少您保护(使用所有类型)密码,即使很清楚,其余的通信也不安全[*].这可能意味着,您只需要为一个登录服务器购买证书,这可以再次为您节省很多钱,具体取决于证书供应商.
对于GWT,如果您无法承担加密所有通信的费用,则由于相同原始策略限制,您必须将登录设置在单独的页面上.
如果仍然不是一个选项,您可以考虑通过OpenID登录,就像stackoverflow一样.
没有一些预先共享的秘密,不能通过不安全的媒体进行任何安全通信- 通常由安装在浏览器中的根证书提供(BTW,浏览器甚至整个操作系统通常通过HTTP下载都很有趣/可怕) .其他系统,例如PGP,依赖于之前建立的对"Web of Trust"的信任,但这只是另一种形式的预共享秘密.没有办法绕过它.
[*]遗憾的是,将SSL用于所有内容还会带来额外的实际问题:1)页面加载速度要慢得多,尤其是如果页面上有许多元素.这是由于SSL引起的往返和由此导致的延迟,即使是最快的SSL服务器场也无法解决这个问题.问题得到缓解,但保持活动连接并未完全消除.2)如果您的页面包含来自外部,非HTTPS站点的元素(例如用户插入的图像),则许多浏览器将显示警告 - 这些警告对于真正的安全问题非常模糊,因此对于安全站点而言通常是不可接受的.
一些额外的想法(不是推荐)
让我们暂时假设最糟糕的情况,即您根本不能使用SSL.在这种情况下,也许令人惊讶的是,在传输之前对密码进行散列(使用盐),实际上可能比什么都不做要好一些.这就是原因:它无法击败Mallory(在密码学中,一个可以操纵通信的人),但至少它不会让Eve(一个只能听的人)读取明文密码.如果我们假设Eves比Mallorys更常见(?),这可能是值得的.但请注意,在这种情况下,您应该再次使用不同的哈希密码(在使用不同的盐之前),然后再将其与数据库值进行比较.
如果SSL不是一个选项,那么你显然对安全性不够关心;)
但严肃地说 - 就像你提到的那样,密码的客户端加密并不是一个好主意.事实上,这是一个非常糟糕的.你不能相信客户端的杰克 - 如果攻击者设法改变JS代码(通过XSS或通过线路发送),那么你的MD5 /任何哈希函数只是通过明文传递?更不用说你应该使用一个好的,强大的,加盐的加密方法,比如bCrypt - 在客户端上运行缓慢的东西,就像之前提到的那样,并没有增加应用程序的安全性.
您可以尝试绕过其中一些问题:通过一些安全的方式发送哈希库(如果首先可能的话,我们现在就不必为此烦恼了,不是吗?),通过某种方式共享一个共同点服务器和客户端之间的秘密并使用它进行加密...... 但最重要的是:尽可能使用HTTPS(在GWT中很难混合使用HTTPS和HTTP)并证明其合理性(如果用户愚蠢到足以使用相同的密码你的非安全相关的应用程序和他的银行帐户,很可能他/她在许多其他网站上使用相同的密码,其中任何一个都可能导致劫持密码).其他方法只会让您认为您的应用程序比它更安全,并使您不那么警惕.
| 归档时间: |
|
| 查看次数: |
5589 次 |
| 最近记录: |