【问题标题】:How to avoid querystring being accessible in ASP.Net dynamically generated chart?如何避免在 ASP.Net 动态生成的图表中可以访问查询字符串?
【发布时间】:2010-11-16 14:06:08
【问题描述】:

为了在 ASP.Net 中创建动态图表和图形,我已将每个图表的 (GDI+) 代码放置在单独的页面文件中 - 因此,如果只是在屏幕上显示图表,则运行图表页面的输出本身。

图表页面包含从 SQL Server 获取相关数据的代码,以及图表生成代码。然后将生成的图表对象保存到 Response.OutputStream。

我想要显示图表的内容页面提供了各种参数来确定将使用哪些数据来生成图表(例如用户 ID、项目 ID、从下拉列表中选择等)。 要将图表显示为内容页面的一部分,然后我在页面中放置一个图像对象,收集各种图表参数,并在后面的代码中将图像对象的 URL 设置为图表页面,以及添加的所有图表参数到查询字符串。

这很好用,除了一件事:当我在浏览器内容页面中显示的图表图像上单击鼠标右键时,我会得到一个“打开图像”选项,它会显示一个包含图表的页面本身(也许并不奇怪,因为它是用图表页面生成的)。但是,问题是在这个图表页面中,带有查询字符串的完整 URL 是可见的,这意味着用户可以更改查询字符串中的值,从而生成一个新图表。这是一个大问题,因为它可能使用户能够为他们不应访问的数据生成图表。

有没有办法避免这个问题,同时仍然使用这种“图表页面”方法来生成和显示动态图表?或者,我是否应该将动态生成的图像保存为文件,例如在磁盘上或 SQL Server Filestream 对象,然后在页面中引用它们?

顺便说一下,我知道可用的各种 ASP.Net 图表控件。但是,我需要生成的图表是针对非常专业的应用程序高度定制的,因此很遗憾,这些控件在这种情况下不起作用。

【问题讨论】:

    标签: asp.net charts gdi+


    【解决方案1】:

    我对我之前的一个项目也有同样的担忧。一种便宜但不是 100% 万无一失的解决方案是在处理图像之前插入 http-referer 检查。从您的页面中加载的图像将具有您的域的引荐来源网址,而直接通过浏览器输入的则没有。

    当然,通过伪造引荐网址很容易被黑客入侵,但它仍然是某种形式的威慑。如果其他人可以提供他们的解决方案,我会很高兴。

    另一种方法是在查询字符串中添加某种校验和参数。只有你知道如何“解密”,并且只有在校验和“正确”时才生成图像。

    【讨论】:

    • 太好了 - 非常感谢!这些建议让我对我目前的情况有了明显的改善。
    • 太好了,也许你可以在完成后分享你的实现。 :)
    【解决方案2】:

    首先,我假设您的用户已通过身份验证(登录)到您的网站,因此您知道他们是谁以及他们应该有权访问哪些数据/图表?

    您需要检查图像生成代码中的传入参数,以查看当前用户是否有权访问他要求的数据。通常,您会为此查询您的用户/权限表(或调用 Membership API 或其他方式)。

    试图隐藏 URL(例如,通过对生成图像的页面执行 POST 而不是 GET)只是“隐蔽安全”,这不是一个好主意。

    顺便说一句,您的问题被称为“URL 篡改”,Google 搜索此问题应该会让您找到正确的方向。

    【讨论】:

    • 是的,用户已经过身份验证,所以我确实可以在为图表提供数据的 SQL 过程中添加权限检查。此外,这种方法听起来符合我听说过的“胖数据库”范式(例如这里概述的那个:ora-00001.blogspot.com/2009/06/…)。至于 URL,我想我只需要为用户试图篡改它的情况提供一个合适的错误消息。
    猜你喜欢
    • 2013-07-12
    • 2011-02-22
    • 1970-01-01
    • 2022-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    • 1970-01-01
    相关资源
    最近更新 更多