【发布时间】:2009-12-08 20:09:32
【问题描述】:
场景如下:
我的 .ascx 上有一个常规超链接。 (不,我决定不使用 asp.net 控件) 单击该超链接时,会通过查询字符串发送要删除的对象的 ID,因此在我的页面的代码隐藏中,我抓住它,如果它存在,则调用 RemoveSomeItem 方法将其删除,然后执行 Response.Redirect 回到Request.Path 因为我们不知道哪个 .aspx 页面将使用此控件。一切正常。
但我还需要在重定向“您刚刚删除 [项目名称]”后在该 .aspx 页面的顶部显示一条好消息
所以我所做的就是在响应重定向中,我添加了一个名为 removedItemName 的附加查询字符串参数,例如字符串中甚至包含一些 HTML:
&removedName=<sup>©</sup> Hockey Cup - Large
问题 ASP.NET 检测到这是一个潜在的不安全字符串,但当然这永远不会,所以我尝试将其添加到 .aspx 页面指令中:
ValidateRequest="false"
但它不起作用。 ASP.NET 仍然抛出错误:
从客户端检测到一个潜在危险的 Request.QueryString 值(removedName="© Hockey...")。
第二,有没有人像这样在查询字符串中传递 Html 以用于完全有害的情况?意思是这个普遍吗?它是否会导致通过查询字符串参数传递带空格的字符串出现问题,或者是否可以接受空格?
【问题讨论】:
-
你能通过 Session 对象传递“removedName”吗?
-
啊,我到底在想什么。我可以传递一个不同的ID。你看我删除了一个项目的克隆。但我仍然可以通过查询字符串传递原始 itemID。然后从仍在我们系统中的真实项目中获取名称。我不需要传递已删除克隆项目的名称。 (你可能不知道我在说什么,但它指的是我们的业务)。无论如何,重点是,尝试找到一种方法不要传递我试图传递的内容,尤其是像你说的那样,HTML 或将在页面上重新显示的内容,因为它对字符串注入是一个很大的禁忌。
标签: asp.net