防止asp.net中的跨站点脚本攻击

时间:2015-06-26 02:59:35

标签: c# asp.net .net xss

我在asp.net websform中有一个按编号搜索的页面。我想制作页面,以防止任何跨站点脚本。

任何人都可以为我提供最好的解决方案吗?

1 个答案:

答案 0 :(得分:5)

MSDN文章"How To: Prevent Cross-Site Scripting in ASP.NET"详细介绍了它。部分内容如下。

步骤摘要
要防止跨站点脚本,请执行以下步骤:
步骤1.检查是否已启用ASP.NET请求验证 步骤2.查看生成HTML输出的ASP.NET代码 步骤3.确定HTML输出是否包含输入参数 步骤4.检查具有潜在危险的HTML标记和属性 步骤5.评估对策。

步骤1.检查是否启用了ASP.NET请求验证
默认情况下,在Machine.config中启用请求验证。验证服务器的Machine.config文件中当前是否启用了请求验证,并且您的应用程序未在其Web.config文件中覆盖此设置。检查validateRequest是否设置为true,如以下代码示例所示。

<system.web>
  <pages buffer="true" validateRequest="true" />
</system.web>

您可以逐页禁用请求验证。除非必要,请检查您的页面是否禁用此功能。例如,如果页面包含可用于接受一系列HTML字符作为输入的自由格式富文本输入字段,则可能需要为该页面禁用此功能。有关如何安全处理此类页面的更多信息,请参阅步骤5.评估对策。

测试是否已启用ASP.NET请求验证

  1. 创建一个禁用请求验证的ASP.NET页面。去做这个, 设置ValidateRequest =“false”,如以下代码示例所示。

    <%@ Page Language="C#" ValidateRequest="false" %> <html> <script runat="server"> void btnSubmit_Click(Object sender, EventArgs e) { // If ValidateRequest is false, then 'hello' is displayed // If ValidateRequest is true, then ASP.NET returns an exception Response.Write(txtString.Text); } </script> <body> <form id="form1" runat="server"> <asp:TextBox id="txtString" runat="server" Text="<script>alert('hello');</script>" /> <asp:Button id="btnSubmit" runat="server"
    OnClick="btnSubmit_Click" Text="Submit" /> </form> </body> </html>

    1. 运行该页面。它在消息框中显示Hello,因为脚本 在txtString中传递并呈现为客户端脚本 你的浏览器。
    2. 设置ValidateRequest =“true”或删除ValidateRequest页面属性并再次浏览到该页面。验证是否显示以下错误消息。
  2. 步骤2.查看生成HTML输出的ASP.NET代码
    步骤3.确定HTML输出是否包含输入参数
    分析您的设计和页面代码,以确定输出是否包含任何输入参数。这些参数可以来自各种来源。以下列表包含常见输入源:

    Form fields, such as the following.
    Response.Write(name.Text);
    Response.Write(Request.Form["name"]);
    Query Strings
    Response.Write(Request.QueryString["name"]);
    
    Query strings, such as the following:
    Response.Write(Request.QueryString["username"]);
    
    Databases and data access methods, such as the following:
    SqlDataReader reader = cmd.ExecuteReader();
    Response.Write(reader.GetString(1));
    
    Be particularly careful with data read from a database if it is shared by other applications.
    Cookie collection, such as the following:
    Response.Write(
    Request.Cookies["name"].Values["name"]);
    
    Session and application variables, such as the following:
    Response.Write(Session["name"]);
    Response.Write(Application["name"]);
    

    步骤4.查看潜在危险的HTML标记和属性 步骤5.评估对策

    (©2015 Microsoft,Terms of use