在 tomcat 服务器上设置随机数

Setup a nonce on tomcat server

在开始之前,请原谅我对安全的无知。我用谷歌搜索了一个解决方案,但我不太清楚可以应用哪些解决方案或如何应用这些解决方案。我有一个应用程序可以调用我的 tomcat 服务器(它提供 JasperReport 报告)。调用类似于:

http://example.com/ReportServlet?report_id=123&param1=a&param2=b

如果您调用它,servlet 将 return 报告。我的问题是,只要您继续进行此调用,无论您调用多少次,它都会 return 报告。我想要的是只有在您单击我的应用程序中的 'run report' 按钮时才能 运行 报告。因此,如果您在浏览器中 运行 那个 url 它不应该工作。我正在考虑使用某种随机数,当单击按钮时它会生成并且只能用于调用报告一次。现在我有一个解决方案,当单击按钮时会生成一个随机字符串,将其插入数据库,该字符串作为参数传递到 url 中(http://example.com/ReportServlet?report_id=123&param1=a&param2=b&nonce=somesha256,servlet 读取此参数并检查数据库,如果有效则标记字符串不再有效。这不是一个干净的解决方案,我想知道 tomcat(甚至 JasperReports)是否有类似于 nonce 的解决方案?

I was wondering if tomcat (or even JasperReports) has a solution similar to a nonce?

Tomcat:没有。

JasperReports:我不知道。我不希望它有这个,因为它的领域不同于限制对某物的访问。 (如果我错了,请有人纠正我,在问题中添加 jasper-reports 标签)

不过,您可以在您的应用程序中轻松实现这一点,例如作为 servlet 过滤器,它会检查您决定使用的随机数: 如果存在随机数: 检查其有效性,然后继续处理常规请求,否则只是 return 并显示错误消息。

这通常需要您在某些存储(通常是数据库)中存储有效的随机数(可能对于报告 and/or 参数也是有效的)并且 remove/mark 在下载或超时时使用。

与分发随机 URL 所需的额外管理工作相比,我几乎认为验证方面(例如 ServletFilter)是微不足道的,但这不是您的问题所在。