2011-09-29 70 views
11

我知道它违反了Same origin policy,这就是为什么它不可能通过简单的ajax请求。我可以使用JSONP。但使用JSONP进行登录听起来并不安全(没有帖子只能得到)。从HTTP通过AJAX调用HTTPS登录

那么是否有更安全的方式通过ajax实现登录到https?

+0

是的,从等式中取出HTTP。如果你在'HTTP'内执行'GET'请求,它就是明文。否则,请在服务器上重新指定,以在登录页面上强制将'HTTP'强制为'HTTPS'。 – Anders

回答

13

它不仅违反了same origin policy,但由于您呼叫的页面不安全,它可能会被干扰并泄漏您尝试保持安全的所有数据。

在整个过程中使用HTTPS。

更好的是,在用户登录时继续使用HTTPS,否则您将拥有the Firesheep problem

+0

我知道我会冒这个风险。但由于网站上的内容都不是用户生成的,因此可以降低被干扰的风险。登录服务使用HTTPS,我想从http – MarutiB

+0

调用它。另外,我无法使用https登录所有网页,它是一个媒体繁重的网站,而https对缓存的影响可能会真的让我的网站变慢。 – MarutiB

+0

@Quentin你能详细说明风险是什么吗?数据如何泄漏? – Dave

1

正如我们在下面的评论中所讨论的,这是Facebook为其注册页面所做的工作,尽管这种方法存在一些漏洞。尽管用户看起来不安全(无锁图标),但实际的请求是通过HTTPS完成的。如果您控制了整个接收页面,那么通过GET执行JSONP请求的安全性就会降低。但是,中间人攻击可能会在接收的页面上修改负载,并将返回的凭据发送给攻击者。

从好的一面来看,没有人只是嗅探数据包就能获得凭据:攻击必须是相当有针对性的。在技​​术上,JSONP可以“返回”Cookie;你只需返回你想要设置的cookies的名称 - 值对,并在接收页面上设置一个函数来设置它们。

但是,除非浏览器以不同的方式处理<script>,并且它可能应该能够使用JSONP响应的响应头以正常方式设置cookie。

+0

我想让人们更容易在我的网站上注册。这又需要安全。所以当有人点击注册。我提出了注册的弹出窗口,当他点击注册时,我希望通过ajax进行注册。 – MarutiB

+1

@MarutiB我喜欢这些,我默认为'我不知道Facebook会做什么',事实证明,他们几乎完全是你正在做的事情。所以也许你没事吧。但是,是的,JSONP或直接包括从https站点呈现的JavaScript(与JSONP相同的想法)是您唯一的解决方案。更多关于上面的cookie。 – Dave

+0

我知道:(我想在改善用户体验的安全性上付出一点点代价 – MarutiB