使用 URL 传递命令会使参数易受攻击

Passing commands with URL leaves parameters vulnerable

我们目前使用的是通用报告,多个用户组将以不同方式使用该报告。我们通过创建具有不同隐藏参数设置(例如 'show column x'、'enable feature y')的链接报告使这成为可能。 其他报告也需要这些设置(参数),因此我们使用 Go to ... Action.

传递它们

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

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

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

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

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

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

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

我想说您唯一的其他选择是通过为您的报告提供 'landing page' 并在 iframe 中显示所有内容来完全隐藏 URL 栏。这个框架可以在你的 Go To URL:

中用 javascript link 定位
="javascript:void(window.open('URL to open','iFrame Name'))"

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

假设您已在所有报告中推出相同的参数结构,以这种方式做事还可以让您维护哪些组可以从中央位置看到什么。