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

时间:2016-12-20 09:44:46

标签: reporting-services ssrs-2014

我们目前正在使用通用报告,多个用户组将以不同方式使用该报告。我们通过使用隐藏参数的不同设置(例如'show column x','enable feature y')创建链接报表,从而实现了这一目标。 其他报告也需要这些设置(参数),因此我们使用Go to ... Action传递它们。

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

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

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

所以我的问题是:如何在Action中使用Reporting Services,同时阻止用户修改我们的敏感参数,同时能够使用HTML Viewer commandsReport Server commands?< / p>

1 个答案:

答案 0 :(得分:1)

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

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

这种混淆程度可能就足够了,可以通过整理每个参数组合的列表或仅根据您需要的列表来实现,并为其分配一个可以在数据集中调用的ID。显然,如果您的用户感到好奇并且可以保持良好状态,这仍然可以改变。

我想说你唯一的另一个选择是通过提供一个“登陆页面”来完全隐藏网址栏。用于报告和显示iframe中的所有内容。您可以使用Go To URL中的javascript链接定位此框架:

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

如果您能够这样做,我建议您将用户分组到Active Directory安全组,然后维护每组的权限和自定义集合。然后,您可以检查用户使用哪些组使用与答案here类似的自定义代码,并相应地返回所需的参数值。

通过这种方式执行操作还可以让您维护哪些组可以从中央位置查看内容,假设您已在所有报告中推出相同的参数结构。