【问题标题】:GWT RPC server side safe deserialization to check field sizeGWT RPC 服务器端安全反序列化以检查字段大小
【发布时间】:2012-11-10 23:24:29
【问题描述】:

假设我通过 RPC 从 GWT 客户端向服务器发送以下类型的对象。对象被存储到数据库中。

public class MyData2Server implements Serializable
{
    private String myDataStr;
    public String getMyDataStr() { return myDataStr; }
    public void setMyDataStr(String newVal) { myDataStr = newVal; }
}

在客户端,我将字段 myDataStr 限制为最多 20 个字符。

我一直在阅读有关 Web 应用程序安全性的内容。如果我学到了一些东西,那就是客户端数据不应该被信任。然后服务器应该检查数据。所以我觉得我应该在服务器上检查我的字段确实不超过 20 个字符,否则我会中止请求,因为我知道这一定是一次攻击尝试(当然假设客户端没有错误)。

所以我的问题是:

  1. 在服务器端实际检查我的字段不超过 20 个字符有多重要?我的意思是攻击的机会/风险有多大,后果会有多严重?根据我的阅读,它看起来可能会通过溢出和拒绝服务导致服务器停机,但不是安全专家,我可能会误解。

  2. 假设我不会浪费时间在服务器上进行字段大小检查,应该如何完成呢?我似乎记得读过(对不起,我不再有参考资料)像这样的幼稚检查

    if (myData2ServerObject.getMyDataStr().length() > 20) throw new MyException();

不是正确的方法。相反,需要定义(或覆盖?)方法 readObject(),类似于here。如果是这样,那么在 RPC 调用的上下文中应该如何做呢?

提前谢谢你。

【问题讨论】:

    标签: gwt rpc


    【解决方案1】:

    在服务器端实际检查我的字段不超过 20 个字符有多重要?

    这 100% 重要,除非您可以 100% 信任最终用户(例如某些内部应用程序)。

    我的意思是机会有多大

    通常:增加。确切的概率只能针对您的具体情况单独回答(即这里没有人能够告诉您,尽管我也对一般统计数据感兴趣)。我能说的是,篡改非常容易。它可以在 JavaScript 代码中完成(例如,使用 Chrome 的内置开发工具调试器)或通过编辑清晰可见的 HTTP 请求数据来完成。

    /攻击的风险以及后果有多严重?

    风险可能会有所不同。最直接的风险可以通过思考来评估:“如果您可以将任何 GWT 可序列化对象的任何字段设置为任何值,您可以存储和做什么?”这不仅是关于超出大小,而且可能会篡改用户ID等。

    根据我的阅读,它看起来可能会通过溢出和拒绝服务导致服务器停机,但不是安全专家,我可能会误解。

    这是另一个需要处理的级别,无法通过 GWT RPC 方法实现中的服务器端验证来解决。

    相反,需要定义(或覆盖?)方法 readObject(),类似于此处。

    我认为这不是一个好方法。它试图完成两件事,但都不能很好地完成。服务器端有两种检查是必须要做的:

    1. 在低级别上,当字节进入时(在它们被 RemoteServiceServlet 转换为 Java 对象之前)。这需要在每台服务器上处理,而不仅仅是 GWT,并且需要在单独的问题中回答(答案可能只是服务器设置的最大请求大小)。
    2. 在逻辑层面上,在您拥有 Java 对象中的数据之后。为此,我会推荐一个验证/授权层。 GWT 的一个很棒的特性是,您现在可以在服务器端和客户端使用 JSR 303 验证。它没有涵盖所有方面(您仍然需要测试用户权限),但它可以涵盖您的“@Size(max = 20)”用例。

    【讨论】:

    • 非常感谢克里斯,这很有帮助——这是我在 StackOverflow 上的第一个问题,我对答案并不失望!
    • 回复。 1. 低级检查,我在我感兴趣的技术堆栈(即 apache-tomcat)的上下文中询问了new question。关于。 2 JSR 303,乍一看很吸引人,也够简单;我发现以下有用的参考资料 StackOverflowgwt r.e.客户端。
    猜你喜欢
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多