要在ASP.Net中创建动态图表和图形,我已将每个图表的(GDI +)代码放在单独的页面文件中 - 因此,如果只是在屏幕上显示图表,则自动运行图表页面的输出。
图表页面包含从SQL Server获取相关数据的代码,以及图表生成代码。然后,生成的图表对象将保存到Response.OutputStream。
我想要显示图表的内容页面提供了各种参数来确定将使用哪些数据来生成图表(例如用户ID,项目ID,下拉列表中的选择等)。 要将图表显示为内容页面的一部分,我然后在页面中放置一个图像对象,收集各种图表参数,并在后面的代码中将图像对象的URL设置为图表页面,以及添加的所有图表参数到查询字符串。
这样做很好,除了一件事:当我右键点击浏览器内容页面中显示的图表图像时,我得到一个“打开图像”的选项,它显示一个包含图表全部的页面本身(也许并不奇怪,因为它是通过图表页面生成的)。但是,问题是在此图表页面中,带有查询字符串的完整URL是可见的,这意味着用户可以更改查询字符串中的值,从而生成新图表。这是一个很大的问题,因为它可能使用户能够为他们无法访问的数据生成图表。
有没有办法避免这个问题,同时仍然使用这种“图表页面”方法来生成和显示动态图表?或者,我是否应该将动态生成的图像保存为磁盘或SQL Server Filestream对象,然后在页面中引用这些文件?
顺便说一句,我知道可用的各种ASP.Net图表控件。但是,我需要生成的图表是针对非常专业的应用程序高度自定义的,所以不幸的是,这些控件在这种情况下不起作用。
答案 0 :(得分:0)
我对之前的一个项目有同样的担忧。一个便宜但不是100%万无一失的解决方案是在处理图像之前插入http-referer检查。从您页面中加载的图片将包含您域名的引荐来源网址,而直接通过浏览器输入的图片将不会包含。
当然,通过伪造推荐人网址很容易破解,但它仍然是某种形式的威慑。如果其他人可以提供他们的解决方案,将会很高兴。
另一种方法是在查询字符串中添加某种校验和参数。只有你知道如何'解密'并且只在校验和'正确'时生成图像。
答案 1 :(得分:0)
首先,我假设您的用户已经过对您网站的身份验证(登录),因此您知道他们是谁以及他们应该访问哪些数据/图表?
您需要检查图像生成代码中的传入参数,以查看当前用户是否可以访问他要求的数据。通常,您可以查询您的用户/权限表(或调用Membership API或其他)。
试图隐藏URL(例如通过POST而不是GET到图像生成页面)只是“默默无闻”,这不是一个好主意。
顺便说一下,您的问题被称为“网址篡改”,谷歌搜索这个问题应该会让您朝着正确的方向前进。