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

san*_*hra 0 .net c# asp.net xss

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

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

Chr*_*ris 7

MSDN文章"如何:防止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>
Run Code Online (Sandbox Code Playgroud)

您可以逐页禁用请求验证.除非必要,请检查您的页面是否禁用此功能.例如,如果页面包含可用于接受一系列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.查看生成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"]);
Run Code Online (Sandbox Code Playgroud)

步骤4.检查可能危险的HTML标签和属性 步骤5.评估对策

(©2015 Microsoft,使用条款)

  • @naveen - 不太合适 - 这是来自MSDN文章的部分归属的精确复制粘贴.预计会提供一个链接和摘要.MSDN内容的正确归属也应根据许可证进行 - https://msdn.microsoft.com/en-us/cc300389. (3认同)