跨站点脚本-正在通过URL修改ASP.NET表单操作

跨站点脚本-正在通过URL修改ASP.NET表单操作,asp.net,webforms,xss,Asp.net,Webforms,Xss,在我们的web应用程序(WebInspect)上运行安全扫描后,它报告了一些aspx页面的几个XSS漏洞 请求URL似乎能够更改表单操作 例如 /Website/somepage.aspx/'+alert(1234)+' 表单操作更改为 action="'+alert(1234)+'" 为了排除我们的应用程序代码,我在默认的新VisualStudioWebForm项目中尝试了这一点,它允许同样的操作 如何防止这种情况 我一直被告知,未经验证的输入被反映到页面中是个坏消息。请检查您的globa

在我们的web应用程序(WebInspect)上运行安全扫描后,它报告了一些aspx页面的几个XSS漏洞

请求URL似乎能够更改表单操作

例如

/Website/somepage.aspx/'+alert(1234)+'
表单操作更改为

action="'+alert(1234)+'"
为了排除我们的应用程序代码,我在默认的新VisualStudioWebForm项目中尝试了这一点,它允许同样的操作

如何防止这种情况


我一直被告知,未经验证的输入被反映到页面中是个坏消息。

请检查您的
global.asax-Application\u Start
以查看是否定义了任何路由。

只需在操作中添加一些内容,如下所示:

<form id="id_form" runat="server" action="Default.aspx">


如果未指定操作表单,asp将填充您在URL中最后一个斜杠旁边写入的属性。如果你在那里写了一些东西,asp不会重写它。

参数化你的变量并清理输入。这一定与你设置的重写规则有关。
/Website/somepage.aspx/'+alert(1234)+'
必须给出一个错误页面,并且不能将其转换为
+alert(1234)+
。至少给了我一个找不到的错误页,因为此部分
/'+alert(1234)+'
是url上的新文件。我没有要参数化或验证的变量。该url已添加到aspx页面url的末尾,它会导致页面以修改的表单动作呈现。我不认为输入是要验证的查询字符串的一部分。这完全是在我的代码之外发生的。我已确认,Visual Studio 2012中未更改的开箱即用Web表单项目类型会出现这种行为。我没有任何重写规则。这不是一个MVC应用程序,只是一个老式的WebForm web应用程序。如果您执行类似于/Website/somepage.aspx/foobar的操作,那么“foobar”将被应用到表单的操作中。这不在我们的代码中,但我开始怀疑第三方库可能正在这样做。有没有一种简单的方法可以查看定义的路线?也许在测试页面上列出它们?嗯。。不能肯定。。也许要列举路线集合
Dim routeCollection AS System.Web.Routing.routeCollection=System.Web.Routing.RouteTable.Routes
请解释为什么您的代码会回答提问者的问题。