【问题标题】:Penetration Testing HTML Posting Issue渗透测试 HTML 发布问题
【发布时间】:2012-08-10 11:07:10
【问题描述】:

我们正计划申请安全测试证书。出于这个原因,我们使用 Paros 工具来测试我们的系统。 该系统在前端用 GWT 编写,数据库连接通过 Hibernate 进行。 当我们使用此工具测试我们的应用程序时,会发生以下需要限制的行为。

该工具能够查看传递给服务器的数据。这很好,但是当我们通过工具对数据进行任何更改时,它会在数据库端的系统中更新。这是一个很大的安全问题。

有人可以指导我吗?

【问题讨论】:

  • 我不明白这里的问题 - 您是说您正在通过 HTTP 代理(在本例中为 Paros)捕获数据、修改它并查看数据库中的更改?这是预期的行为 - 如果您更改请求,您的后端将响应更改的请求。您的应用程序是否需要一种方法来发出不可篡改的请求。从应用程序外部?
  • 是的,我们需要一种方法,使请求不能被外部应用程序修改,
  • 我不完全确定客户端和服务器之间的通信是如何发生的,但通常这样做的方式是使用签名请求——除了实际请求,还有一个基于时间的签名这是无法复制的。但是,如何做到这一点在很大程度上取决于应用程序,而且实现起来并非易事。
  • 我已经进一步搜索,我想在我的 GWT 应用程序中防止 XSRF 攻击。我将在developers.google.com/web-toolkit/doc/latest/… 链接周围尝试一些东西。我仍然不太清楚如何准确地集成到我的代码中。

标签: security penetration-testing


【解决方案1】:

如果您仍在寻找解决此问题的方法,可以使用请求签名。我之前没有提到它的原因是因为我唯一一次看到请求签名,其中涉及证书,并且主要使用 Web 服务安全标准。另一次我推荐的请求签名实现是针对移动应用程序 - 它也相对更容易在那里执行,因为您可以使用设备上的证书来执行签名,并且服务器可以验证此签名(本质上是公共密钥加密机制)。

正如您在 cmets 中提到的,它有多个方面 - 一个是防止 XSRF,它本质上包括一个随机数,以确保攻击者无法重播请求,或制作可能伤害经过身份验证的用户的请求。这个 nonce 必须来自服务器,因为你使用 Javascript 创建的任何东西,攻击者也可以创建。此 nonce 将确保您的请求是特定时间的,并且不能在以后重播。

但是,当用户处于恶意网络中并且攻击者正在对所有流量执行 MitM 攻击时,nonce 不会阻止攻击。攻击者仍然可以修改请求,并且由于服务器以前从未见过该随机数,它将接受该请求为有效。为了防止这种情况,您需要采取相应的对策——一,所有流量都应该通过 SSL,二,所有请求都必须签名,以防止篡改。签名部分特别难,特别是如果您必须确保攻击者无法执行相同的签名。我看到的示例涉及 webapp 的证书级别身份验证,然后使用这些证书执行签名——这对于您似乎正在开发的应用程序的要求可能过于严格。其他方法包括使用用户拥有/知道的东西——可能是令牌、密码、秘密答案等——攻击者无法复制,并使用该信息签署请求。

Here 是一个关于如何通过 PHP 执行此操作的示例。不过,我不知道这种机制是否可以适应您的目的。 OAuth 可能是另一种可能的方法,但由于我从未见过应用程序这样做,我不太确定。

抱歉,我没有具体的方法或代码示例供您查看,但我看到的大多数实现只是从设计的角度来看,而不是从实际代码的角度来看。

【讨论】:

    猜你喜欢
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多