【问题标题】:Protect BIRT's report保护 BIRT 的报告
【发布时间】:2014-01-31 05:01:53
【问题描述】:

我可以阻止用户从我建立的网站打开 BIRT 报告。但是考虑到报表的链接仍在浏览器的历史记录中,例如,这台计算机上的任何用户仍然可以通过调用历史记录中的链接来打开报表。

如何防止BIRT报告的链接在用户关闭报告后停留在浏览器中?所以打开报告的唯一方法是从网站。

或者也许有人有其他更好的方法来实现相同的目标?就像在 BIRT 中显示用户名和密码一样,用户才能使用报告参数?

【问题讨论】:

  • 您没有说您使用的是哪个版本的 BIRT,但如果您使用的是开源 BIRT(当前为 4.3.1),那么将报告设为私有的选项并不多。您能否详细说明您正在寻找的安全级别?
  • 是的,我使用的是 Eclipse BIRT 4.3.1。我需要通过显示用户名或密码来防止非法用户打开报告,无论是基于 RDBMS(postgresql)用户表还是自动删除浏览器历史记录。我也可以使用其他方法。 :)

标签: security reporting-services birt


【解决方案1】:

除非整个会话使用 https 加密,否则让用户在浏览器中输入密码并按照 James 的建议将其提交给服务器是有安全风险的。

简短的回答是:不要直接使用 BIRT servlet。

您可以使用商业 iHub,它可能具有用于用户访问控制的基础架构。

如果您使用的是开源 BIRT,请在服务器端以文件(或 OutputStream)的形式生成 BIRT 报告,然后在您的应用程序的控制下将该文件返回给客户端。

有关详细信息,请在互联网上搜索“集成 BIRT”。

如果您的应用程序不是用 Java 编写的,或者您没有足够的控制/知识直接在应用程序中执行此操作,您可以使用这样的“一次性令牌”方法:

在应用程序中,

  • 生成一个随机唯一令牌(一定不能通过知道其他令牌来预测)
  • 将 BIRT 报告生成为文件(例如 PDF),其中文件名包含令牌。
  • 向用户返回一个“下载链接”,该链接指向一个简单的 servlet(见下文), 将令牌作为 URL 的一部分提供(例如 ?token=xxxx)

小服务程序:

  • 检查是否在 URL 中给出了令牌
  • 检查文件名与令牌匹配的 PDF 文件是否存在
  • 如果文件存在,则在HTTP正文中将其返回给客户端,然后将其删除。

这样,令牌使用一次性密钥:如果您知道令牌,您可以只下载一次 BIRT 报告。这一切都直接从浏览器完成,令牌被消耗,因此之后无用

【讨论】:

  • 您有详细学习使用令牌的链接或指南(可能带有示例)吗?
  • 最安全的方法是使用实​​际(一次性密码)[en.wikipedia.org/wiki/One-time_password].但是,根据您的用例,生成 {unique_id}-{unpredictable_random_string} 形式的令牌字符串可能就足够了。请注意,随机函数并不是真正随机的,除非它们使用特殊硬件。因此,对于邪恶的黑客来说,这并不是真正不可预测的——但它的不可预测性足以阻止您的用户看到他们不应该看到的报告。
【解决方案2】:

使用密码参数的最简单方法。

select <feilds>


Where 'password' = ?

使用文本框参数,当用户运行报表时,在文本框中输入“密码”,否则 SQL 不返回结果。

SQL 不区分大小写,因此您的密码不会区分大小写。这也是一个非常低的安全措施。只适合防止随意访问。

JavaScript 区分大小写,因此您可以在 Pa$$word 位于 JavaScrip 变量中的地方编写一些内容(例如查询过滤器),然后与该变量进行比较以区分大小写。

开源BIRT 并非旨在提供对数据的“安全”访问。如果您必须提供数据的真正安全性,则需要在客户端访问 BIRT 之前完成。

【讨论】:

  • 有没有办法分割参数窗口?第一个弹出密码,然后显示下一个弹出报告参数。
  • @y2a 你可以做级联参数。它仍然是一个弹出窗口,但第二个参数框取决于第一个。我怀疑这会进一步降低安全级别。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-29
相关资源
最近更新 更多