【问题标题】:Passing commands with URL leaves parameters vulnerable使用 URL 传递命令会使参数易受攻击
【发布时间】:2016-12-20 09:44:45
【问题描述】:

我们目前使用的通用报告将被多个用户组以不同的方式使用。我们通过创建具有不同隐藏参数设置(例如“显示列 x”、“启用功能 y”)的链接报告来实现这一点。 其他报告也需要这些设置(参数),因此我们使用 Go to ... Action 传递它们。

为了创建我们所追求的外观,我们还传递了一些额外的参数,HTML Viewer commandsReport Server commands,例如 &rc:Parameters=False (reference)。

不幸的是,这让我们只有Go to URL 选项,因为微软还没有为Go to Report 实现这些命令。这意味着我们必须在 URL 中传递我们的设置(隐藏参数)。这会导致安全问题,例如:&PARAMETER_ENABLE_FEATURE_Y=False

用户可能会注意到 URL 中的此参数,因此可以通过将 URL 编辑为 &PARAMETER_ENABLE_FEATURE_Y=True 来启用此功能。

所以我的问题是:如何在Reporting Services 中使用Action,同时防止用户编辑我们的敏感参数并同时能够使用HTML Viewer commandsReport Server commands

【问题讨论】:

  • 您可以使用 POST 而不是 GET 来调用报告。 POST 将参数放入文章正文而不是 URL(这是 GET 所做的)。您可能可以使用 javascript 来执行此操作。但是:用户仍然可以使用 F12 工具查看帖子参数,更糟糕的是......由于某种原因,SSRS 然后将帖子转换为 GET,因此您无论如何都可以在 URL 上看到它们

标签: reporting-services ssrs-2014


【解决方案1】:

如果您绝对必须使用基于 URL 的参数,那么您将永远无法获得完全的安全性。

通过 URL 导航时,您可以隐藏参数值而不进行硬编码的唯一方法是使它们成为数据驱动的。但是,在您的场景中,这不是 100% 安全的,因为您仍然需要传递填充数据驱动参数的值。

这种级别的混淆可能就足够了,可以通过整理每个参数组合的列表或仅列出您需要的参数组合并为其分配一个可以在数据集中调用的 ID 来实现。显然,如果您的用户好奇并且维护起来很麻烦,这仍然可以由您的用户更改。

我想说您唯一的其他选择是通过为您的报告提供一个“登录页面”并在 iframe 中显示所有内容来完全隐藏 URL 栏。此框架可以通过您的Go To URL 中的 javascript 链接定位:

="javascript:void(window.open('URL to open','iFrame Name'))"

如果可以,我建议您将用户分组到 Active Directory 安全组中,然后为每个组维护一组权限和自定义设置。然后,您可以使用类似于答案here 的自定义代码检查用户属于哪些组,并相应地返回所需的参数值。

如果您在所有报告中部署了相同的参数结构,那么这样做还可以让您维护哪些组可以从一个中心位置看到什么。

【讨论】:

  • 非常感谢。我决定将一组参数移动到配置表中,根据Active Directory group 返回一个值并将其用作default value。一些其他参数将保留在 URL 中,因为它们指示所选日期、成本中心等。对于这些参数,我确保 available values 对用户的上下文有效。
猜你喜欢
  • 2018-11-17
  • 1970-01-01
  • 2016-04-18
  • 2018-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-03
相关资源
最近更新 更多