【原创】ASP.NET防攻击的12项措施

1、不要关闭ASPX页面的ValidateRequest选项

2、限制输入,除了客户端验证,还要在服务端验证,验证长度、数据范围、格式、数据类型

3、在数据库中使用正确的数据类型,如Integer,Double,DateTime

4、使用 HttpUtility.HtmlEncode 限制用户输入不安全的脚本代码

5、如需开放部分HTML代码,先HTMLEncode所有内容,再把需开放的标签加密后的内容替换:

 void submitBtn_Click(object sender, EventArgs e)

  {

    // Encode the string input

    StringBuilder sb = new StringBuilder(

                            HttpUtility.HtmlEncode(htmlInputTxt.Text));

    // Selectively allow  and <i>

    sb.Replace("<b>", "<b>");

    sb.Replace("</b>", "");

    sb.Replace("<i>", "<i>");

    sb.Replace("</i>", "");

    Response.Write(sb.ToString());

  }

6、验证URL参数,如:

if (!System.Text.RegularExpressions.Regex.IsMatch(

       Request.QueryString["Name"], @"^[a-zA-Z'.\s]{1,40}$"))

    Response.Write("Invalid name parameter");

  else

    Response.Write("Name is " + Request.QueryString["Name"]);

7、加密URL参数,如:

//加密
Response.Redirect("DetailInfo.aspx?id=" + Convert.ToBase64String(System.Text.Encoding.Default.GetBytes("sp10006")).Replace("+","%2B"));
//解密
string ID = System.Text.Encoding.Default.GetString(Convert.FromBase64String(Request.QueryString["id"].ToString().Replace("%2B","+")));

8、验证权限,如判断当前用户

9、验证Cookie的内容,如Length,range,format,type

10、使用Request.MapPath防止“..”相对路径

11、在SQL查询中使用存储过程或带参数的SQL语句

12、不要把错误页面抛给客户看,修改Web.config的如下内容:

<customErrors mode="On" defaultRedirect="YourErrorPage.htm" />

 

更多安全相关的内容,参考:http://msdn.microsoft.com/en-us/library/bb355989.aspx

你可能感兴趣的:(asp.net)