在ASP.NET 2.0中隐藏查询字符串

时间:2013-07-15 21:20:40

标签: c# asp.net

我们的网站包含3个主要页面,我们称之为“Start.aspx”,然后是内部iframe,用户可以在其中进行几乎所有的网站互动。

最近,我必须实现在不同产品的Start.aspx页面之间跳转的功能,并自动将内容iframe更改为指定的页面。

实际功能正常,但我们遇到的问题是暴露了完整的查询字符串。因为我们在内容iframe中加载所有页面,所以在常规站点使用期间,页面URL保留在“Product / Start.aspx”。

但是,这个新功能是将一个查询字符串传递给Start.aspx(它有适当的解析器来加载内容iframe中的请求页面),我们需要将该URL保留为“Start.aspx”。

到目前为止,我已经研究了URL Rewriting,因为每个产品的目标网页都是“[Product] /Start.aspx”,因此会抛出错误。我查看了一个不同的URL Rewriting解决方案,以及ScottGu's blog post on routing

问题在于这些解决方案似乎用于简化导航,例如“Blogpost.aspx?Year = 2013& Month = 07& Day = 15”并将其转换为“Blogpost.aspx / 2013/07 / 14“这真的不是我们想要的。我们不是试图通过URL简化导航,我们只是试图完全隐藏我们的查询字符串。

一旦内容iframe具有其所需的内容,我们的目的是将“[Product] /Start.aspx?frame=Company.aspx?id=1570”转换为“[Product] /Start.aspx”初始查询字符串。我们不需要考虑每一页。我们只需要将其作为总体规则。 90%的时间它不会成为问题,因为大多数正在完成的工作不会在用户只是切换产品的情况下从产品跳转到产品(这是以专门使用“Response.Redirect”的方式完成的。 [产品] /Start.aspx “)”。

一旦内容iframe从Querystring参数加载,我们就不再需要它了。其余功能通过iframe运行,没有任何问题。

我是否在思考这个问题,还是我要求的东西不是真的可行?

3 个答案:

答案 0 :(得分:2)

就字面意思“删除所有查询字符串字符”而言仍然可以将查询字符串值传递给另一个页面时,我认为这是不可能的。除非你在会话变量或类似的东西中这样做。

如果您只是担心在查询字符串中以纯文本显示敏感数据,则可以选择“加密”查询字符串:

http://www.codeproject.com/Articles/33350/Encrypting-Query-Strings

查询字符串仍将显示,但它将是“Product / Start.aspx?e0ayfefae0y0someencryptedmess108yfe0ayf0a”。接收查询字符串的页面将对其进行解密。因此查询字符串的功能就在那里,但最终用户不知道这些值。

答案 1 :(得分:1)

你可以使用POST而不是GET吗?这样,数据就是表单,而不是查询字符串。

作为旁注,隐藏参数作为使URL看起来更好并且可以书签的方式很好。如果你出于任何安全原因这样做,它的安全性非常浅。对于用户来说,查看在表单和查询字符串中传递的内容以及更改和重新发布这些内容都是微不足道的。安全性主要需要在服务器端处理。

答案 2 :(得分:1)

由于您已将此标记为ASP.NET问题,因此我想说的方法是将导航数据保存在Session变量中。

相关问题