一、算数运算和转换
对于所有算术运算和转换时,如无法确认是否会产生溢出时必须使用Checked方法进行溢出检查,同时必须使用try{}catch{}进行错误控制。
public int TestChecked(string[] args)
{
try
{
int number1 = 2100000;
int number2 = 2300000;
int number3 = checked(number1 * number2);
return 1;
}
catch (Exception e)
{
return 0;
}
}
{
try
{
int number1 = 2100000;
int number2 = 2300000;
int number3 = checked(number1 * number2);
return 1;
}
catch (Exception e)
{
return 0;
}
}
二、参数数据类型检查
1.数据类型检查
除关键词、加密或编码后的参数、用户上传文本信息等必须传递字符串参数的时候,其他参数必须以数字形式进行参数传递,所有传递的参数必须进行类型检查,如出现传递参数不正确,必须以给用户以明确提示。如参数为字符串参数时,应使用字符串检查,以去除字符串中的HTML代码,保证字符串中不能出现危害程序安全。
2.重点去除的HTML代码有
<script>标签、Src属性、Object标签、<iframe>标签
3.数字验证
/// <summary>
/// 数字验证方法
/// </summary>
/// <returns>返回转换后的数字或转换失败后的0</returns>
public int TestIntQueryString()
{
int iQueryResult = 0;
int.TryParse(Request.QueryString["id"], out iQueryResult); //数字验证方法
return iQueryResult;
}
/// 数字验证方法
/// </summary>
/// <returns>返回转换后的数字或转换失败后的0</returns>
public int TestIntQueryString()
{
int iQueryResult = 0;
int.TryParse(Request.QueryString["id"], out iQueryResult); //数字验证方法
return iQueryResult;
}
4.字符串验证
/// <summary>
/// 字符串验证
/// </summary>
/// <returns>返回验证后的字符串或验证失败后的空字符串</returns>
public string TestStringQueryString()
{
string strQueryResult = "";
strQueryResult = Request.QueryString["KeyWord"].ToString();
strQueryResult = StringFilter.FilterScript(strQueryResult);
return strQueryResult;
}
/// 字符串验证
/// </summary>
/// <returns>返回验证后的字符串或验证失败后的空字符串</returns>
public string TestStringQueryString()
{
string strQueryResult = "";
strQueryResult = Request.QueryString["KeyWord"].ToString();
strQueryResult = StringFilter.FilterScript(strQueryResult);
return strQueryResult;
}
三、文件上传时文件类型检查
文件上传路径、上传类型不允许以参数形式转递,只能写在配制文件或硬编码写在程序代码中。
文件上传类型只允许为JPG、BMP、GIF、RAR、DOC、XLS。
所有上传文件必须改名,命名规范为:年+月+日+小时+分钟+秒.扩展名。扩展名在类型判断为正确扩展名后,使用经验证的扩展名为最终上传文件扩展名。如遇图片需要自动缩略,缩略图在文件名前加前缀Small_。
所有上传文件必须按“上传文件目录/年/月/日/”目录结构存放,图片存放在最底层目录,上传文件目录必须为指定目录,且项目中只能有一个唯一上传文件目录,上传文件目录中只允许存放图片、JS、HTML等静态文件。
文件上传类型只允许为JPG、BMP、GIF、RAR、DOC、XLS。
所有上传文件必须改名,命名规范为:年+月+日+小时+分钟+秒.扩展名。扩展名在类型判断为正确扩展名后,使用经验证的扩展名为最终上传文件扩展名。如遇图片需要自动缩略,缩略图在文件名前加前缀Small_。
所有上传文件必须按“上传文件目录/年/月/日/”目录结构存放,图片存放在最底层目录,上传文件目录必须为指定目录,且项目中只能有一个唯一上传文件目录,上传文件目录中只允许存放图片、JS、HTML等静态文件。
四、验证SQL语句查询的输入
所有SQL查询采用参数方式传递给SQL语句,所以参数在传递前必须进行类型检查。
所有SQL语句不能使用“*”来拉取数据库列,程序中使用到那些列,就必须在SQL中详细列出所要拉取的数据列。
所有SQL语句不能使用“*”来拉取数据库列,程序中使用到那些列,就必须在SQL中详细列出所要拉取的数据列。
五、异常捕获
所有函数必须包含错误处理程序,对于有对象打开的函数,必须同时提供finally程序块用于在函数执行完后关闭已打开的对象。
当产生异常的时候,应以友好的方式提示用户程序所出现的问题,但在提示信息中不能包含所有与程序有关的信息例如:文件路径、代码等
当产生异常的时候,应以友好的方式提示用户程序所出现的问题,但在提示信息中不能包含所有与程序有关的信息例如:文件路径、代码等
try
{
//代码段
}
catch
{
//捕获异常
}
finally
{
}
{
//代码段
}
catch
{
//捕获异常
}
finally
{
}