我们正计划申请安全测试证书。出于这个原因,我们使用 Paros 工具来测试我们的系统。该系统在前端用 GWT 编写,数据库连接通过 Hibernate 进行。当我们使用此工具测试我们的应用程序时,会发生以下行为,需要对其进行限制。
该工具能够查看传递给服务器的数据。这很好,但是当我们通过工具对数据进行任何更改时,它会在数据库端的系统中更新。这是一个很大的安全问题。
有人可以指导我吗?
我们正计划申请安全测试证书。出于这个原因,我们使用 Paros 工具来测试我们的系统。该系统在前端用 GWT 编写,数据库连接通过 Hibernate 进行。当我们使用此工具测试我们的应用程序时,会发生以下行为,需要对其进行限制。
该工具能够查看传递给服务器的数据。这很好,但是当我们通过工具对数据进行任何更改时,它会在数据库端的系统中更新。这是一个很大的安全问题。
有人可以指导我吗?
如果您仍在寻找解决此问题的方法,可以使用请求签名。我之前没有提到它的原因是因为我唯一一次看到请求签名,其中涉及证书,并且主要使用 Web 服务安全标准。另一次我推荐的请求签名实现是针对移动应用程序 - 它也相对更容易在那里执行,因为您可以使用设备上的证书来执行签名,并且服务器可以验证此签名(本质上是公共密钥加密机制)。
正如您在评论中提到的那样,它有多个方面 - 一个是防止 XSRF,它本质上包括一个随机数,以确保攻击者无法重播请求,或制作可能伤害经过身份验证的用户的请求。这个 nonce 必须来自服务器,因为您使用 Javascript 创建的任何内容,攻击者也可以创建。这个 nonce 将确保您的请求是特定时间的,并且它不能在以后的时间点重播。
但是,随机数不会阻止用户处于敌对网络中的攻击,并且攻击者正在对所有流量执行中间人攻击。攻击者仍然可以修改请求,并且由于服务器以前从未见过该随机数,它将接受该请求为有效。为了防止这种情况,您需要采取相应的对策——一,所有流量都应该通过 SSL,二,所有请求都必须签名,以防止篡改。签名部分特别难,特别是如果您必须确保攻击者无法执行相同的签名。我看到的示例涉及 webapp 的证书级别身份验证,然后使用这些证书执行签名——这对于您似乎正在开发的应用程序的要求可能过于严格。
这是一个关于如何通过 PHP 执行此操作的示例。不过,我不知道这种机制是否可以适应您的目的。OAuth可能是另一种可能的方法,但由于我从未见过应用程序这样做,所以我不太确定。
抱歉,我没有具体的方法或代码示例供您查看,但我看到的大多数实现都只是从设计的角度来看,而不是从实际的代码角度来看。