Web services Web服务设计:防止未经授权的记录id攻击

Web services Web服务设计:防止未经授权的记录id攻击,web-services,security,primary-key,Web Services,Security,Primary Key,我正在设计一个web应用程序(JavaScript+web服务API),供多个用户使用,每个用户都有一个用户角色,其中数据保存在共享数据库和共享表中。绝对不允许用户访问未经授权的数据(基于其分配的角色),这一点至关重要 我担心以下情况造成的安全威胁: 用户X是组织A的管理员用户,希望添加用户 致A组织的报告联络小组 用户X首先使用UI查询web服务API以获得可用用户的列表 API对用户X进行身份验证和授权,并返回 用户X的角色配置文件允许其访问的用户记录 但是,在点击save按钮之前,用户X将

我正在设计一个web应用程序(JavaScript+web服务API),供多个用户使用,每个用户都有一个用户角色,其中数据保存在共享数据库和共享表中。绝对不允许用户访问未经授权的数据(基于其分配的角色),这一点至关重要

我担心以下情况造成的安全威胁:

  • 用户X是组织A的管理员用户,希望添加用户 致A组织的报告联络小组

  • 用户X首先使用UI查询web服务API以获得可用用户的列表

  • API对用户X进行身份验证和授权,并返回 用户X的角色配置文件允许其访问的用户记录

  • 但是,在点击save按钮之前,用户X将不在授权列表中的用户ID注入用于更新联系人组的API调用中

  • 如何有效地保护我的web服务API免受此类攻击

    • 我是否在API调用中提供并期望数据库主键Id值,并为特定API调用中涉及的每个Id应用授权逻辑

    • 当我提供授权记录列表并在调用save/update方法时以某种方式将其映射回实际主键时,我是否会生成一个替换键

    除非您有非常严格的安全要求,否则我不认为公开PK ID值应该是一个主要问题,但如果可行的话,用某种替代方法将它们抽象出来可能不是一个坏主意(只要确保您不会过度设计该部分,并有可能导致错误或ID冲突)


    无论哪种情况,重要的是在完成更改之前重复授权过程。做这件事最简单的方法可能就是重复您在第一时间获取记录列表时所做的调用,然后获取一个新的列表。现在,当且仅当某个目标存在于该新列表中时,才对该目标记录执行更改;提供给用户X的原始列表被简单地丢弃,他对其所做的任何更改都将无关紧要。

    除非您有非常严格的安全要求,否则我不认为公开PK ID值应该是一个主要问题,但如果可行的话,通过某种替换将其抽象掉可能不是一个坏主意(只需确保您不会过度设计该部件,并有可能导致错误或ID冲突)


    在这两种情况下,重要的是在完成更改之前重复授权过程。最简单的方法可能是重复您在第一次获取记录列表时所做的调用,然后获取一个新列表。现在,当且仅当某个目标记录存在时,才对该目标记录执行更改s在这个新列表中;呈现给用户X的原始列表被简单地丢弃,他对它所做的任何更改都将是无关的。

    我认为您应该使用服务器端验证。如果他们向查询中注入任何Id,这不重要,您应该查看查询服务器端,并确保这是他们可以或应该执行的操作表单。他们应该能够发送任何Id,然后你决定应该从那里发生什么。我认为你应该使用服务器端验证。如果他们向查询中注入任何Id,这应该无关紧要,你应该查看查询服务器端,确保这是他们可以或应该执行的。他们应该能够通过ny Id,然后你决定从那里发生什么。