string strCmdText= @"/C dir c:\files\" + Request.QueryString["dir"];
ProcessStartInfo info = new ProcessStartInfo("CMD.exe", strCmdText);
Process.Start(info);
缺省情况下,Response.Write(和快捷方式 <%= =>)是脆弱的,除非开发人员记得对输出进行 HTML 编码。最近的快捷方式 <%: HTML 默认编码,尽管一些开发人员可能使用这种方式将值插入到 JavaScript 中,这样它们仍然可以被攻击者转义。即使使用现代的 剃刀引擎,也很难做到这一点:
var name = '@Html.Raw(HttpUtility.JavaScriptStringEncode(Model.Name))';
NET 默认启用 请求确认,它将阻止来自 cookies、查询字符串和可能具有潜在恶意的 POST 数据(例如 HTML 标签)的任何输入。这似乎可以很好地处理来自特定应用程序的输入,但是如果数据库中有内容是从其他来源插入的,比如从使用其他技术编写的应用程序插入的,那么仍然有可能输出恶意脚本代码。另一个弱点是在属性值中插入数据。例如:。
<%
alt = Request.QueryString["alt"];
%>
<img src="http://example.com/foo.jpg" alt="<%=alt %>" />
尽管由于需要攻击者伪造 View State 和 事件验证值,遗留的 Web 表单应用程序通常对 CSRF 更加安全,但是新的 MVC 应用程序可能会受到攻击,除非开发人员手动实现了 防伪代币防伪代币。注意,我并不是说 web 表单不容易受到攻击,只是简单地传递一些基本参数比较困难——不过有一些修复程序,比如 集成用户密钥到 View State 值中。
当 EnableEventValification 属性设置为 true 时,ASP.NET 验证控件事件是否源自该控件呈现的用户界面。控件在呈现期间注册其事件,然后在回发或回调处理期间验证事件。例如,如果列表控件在呈现页时包含编号为1、2或3的选项,并且如果收到指定选项4的回发请求,则 ASP.NET 将引发异常。ASP.NET 中的所有事件驱动控件都默认使用此特性。