防止asp.net中的跨站点脚本攻击
本文关键字:站点 脚本 攻击 asp net 防止 | 更新日期: 2023-09-27 17:59:43
我在asp.net表单中有一个按编号搜索的页面。我想制作这个页面,这样它就可以防止任何跨站点脚本。
有人能给我提一个最好的解决方案吗。?
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>
您可以逐页禁用请求验证。请检查您的页面是否禁用此功能,除非有必要。例如,如果页面包含一个自由格式的富文本输入字段,设计用于接受一系列HTML字符作为输入,则可能需要禁用该功能。有关如何安全处理此类页面的更多信息,请参阅步骤5。评估对策。
测试ASP.NET请求验证是否已启用
创建一个禁用请求验证的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>- 运行页面。它在消息框中显示Hello,因为脚本在txtString中传递并呈现为中的客户端脚本您的浏览器
- 将ValidateRequest设置为"true"或删除ValidateRequit页面属性,然后再次浏览到该页面。验证是否显示以下错误消息
步骤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,使用条款)