Http 对于安全的web应用程序,具有REST式业务逻辑的三层体系结构是否可行?

Http 对于安全的web应用程序,具有REST式业务逻辑的三层体系结构是否可行?,http,rest,ssl,https,three-tier,Http,Rest,Ssl,Https,Three Tier,所以,不要拘泥于回答这个问题,也不要拘泥于提出建议或改进。我以前从未组装过大型web应用程序。以下是我的思考过程: 持久层:标准数据库(MySQL现在) 业务逻辑层:类似REST的结构(PHP、Java servlet等) 表示层:Web浏览器、Android设备(应用程序而非浏览器)和其他 我选择这种架构的原因是,设备可以设计自己的自定义UI,并通过使用GET、POST和不与服务器交互的内容来利用类似REST的功能 问题1: 问题是,如何保护用户的信息?您可以通过SSL连接对用户进行身份验

所以,不要拘泥于回答这个问题,也不要拘泥于提出建议或改进。我以前从未组装过大型web应用程序。以下是我的思考过程:

  • 持久层:标准数据库(MySQL现在)
  • 业务逻辑层:类似REST的结构(PHP、Java servlet等)
  • 表示层:Web浏览器、Android设备(应用程序而非浏览器)和其他
我选择这种架构的原因是,设备可以设计自己的自定义UI,并通过使用GET、POST和不与服务器交互的内容来利用类似REST的功能

问题1:

问题是,如何保护用户的信息?您可以通过SSL连接对用户进行身份验证,并返回一个特殊的哈希值,以便用户可以操纵其帐户。但是,如果有人在网络上侦听,他们所要做的就是侦听REST调用并窃取哈希值。一种解决方案是,所有类似REST的调用都必须通过SSL,但这会导致另一个问题

问题2:

如果REST过程使用SSL,那么浏览器必须使用SSL来处理一切事情,据我所知,这些事情在不必要时可能会变得缓慢和繁琐。此外,SOP使从不安全的浏览器对REST过程使用SSL ajax调用变得不可能。HTTP和HTTPS被认为是不同的来源,尽管它们的来源相同,协议不同

这个解决方案可行吗?我将如何解决这两个问题?或者(可能)我应该为我的web应用程序寻找更好的体系结构。提前感谢您的所有建议。

如果您想保护信息,您必须使用SSL,因为任何人都可以监听网络并查看用户信息。如果要保护访问,请使用HTTP身份验证。通过SSL,Basic是足够安全的,但如果您不想对每个请求都使用SSL,那么Digest就是一种方法:

  • 您的应用程序可以是无状态的:即更为restful、更易于负载平衡
  • 如果侦听(无会话劫持),身份验证令牌很难重用
  • 几乎每个HTTP客户机(浏览器或库)都可以使用基本或摘要HTTP身份验证
事实证明,对于这个答案,实际上没有很好的解决方案。您可以使用SSL保护一切,也可以设计自己的自制认证系统。一种常见的方法是向用户发送一个唯一的散列,将散列存储在数据库和客户端机器上的cookie中。然后只有该用户的IP、用户代理等。。将通过该cookie的身份验证


所以答案是肯定的,解决方案是可行的。为了防止账户劫持,需要采取额外的安全预防措施。用于登录的SSL将保护密码。唯一的散列将允许用户继续进行身份验证,而无需向帐户提供密码。存储有关用户的大量信息,如IP、浏览器代理等。。。将不允许轻易劫持帐户。

是什么让你说SSL对所有东西都很昂贵?唯一(计算上)昂贵的部分是会话密钥的创建;如果客户机在请求之间保持连接的开放性(与HTTP/1.1相同),那么它的成本几乎与普通HTTP一样高。(不过部署起来更麻烦/成本更高。)据我的理解,握手代价很高(创建会话密钥)。这是我第一次听说连接保持开放。我必须研究一下,握手确实很昂贵,因为它需要交换大量的信息(在计算上也相当昂贵,但在现代计算机上这是不存在的)。但是HTTP/1.1有一个保持连接活动的规定(“管道”IIRC)。无论如何,这对速度至关重要——在引入HTTP之前,HTTP是一个缓慢的协议猪——只要连接到具有相同凭据的同一服务器,就没有问题。(这确实使编写HTTP协议实现变得很困难,但大多数人并不这么做。)