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