安全准则:所有用户输入的信息都可以认为是恶意的,如:SQL注入攻击,跨站脚本攻击,缓冲区溢出等.
SQL注入的常见方式:
1.在输入时添加等式,如登陆时在用户名文本框输入:'or 1=1--,假设程序的SQL语句为"select count(*) from Users where userName='"+txtUserName.Text+"', and password='"+txtPwd.Text+"'"那么输入以上信息后整条语句将变为:"select conut(*) from Users where userName=' 'or 1=1--" 其中password=将被注释掉
2.在语句中添加xp_cmdshell,xp_grantlogin,xp_regread等存储过程,这些存储过程都可以执行一些较为特殊的功能,如利用xp_cmdshell可以执行一些脚本程序或命令行语句,xp-regread能读取注册表信息
其他可能会影响系统安全的漏洞:
其中数据库的三个高危帐户也可能被利用,sa,ASP.NET工作进程帐户,最高权限帐户
应用程序的错误调试信息可能泄露系统的一些信息,不法分子可能利用这些信息来对系统造成攻击,如错误调试页输出的系统版本信息,不法分子会根据版本号寻找相应的系统漏洞来对系统进行破坏
对以上需要注意的地方,我们可以在系统设计时采取相应的预防措施,使程序避免上述攻击:
1.校验用户的输入信息,如使用.NET的验证控件,RegEx类(正则表达式)
2.参数化SQL语句,尽量使用存储过程,在效率上,执行存储过程也好过SQL语句
3.删除上述执行特殊功能的存储过程.
4.给应用程序最低的必要权限访问帐户,如:用户仅需查询某一张表,则仅赋予用户查询该张表的权限
5.使用别名来让ASP.NET帐户访问数据库
SQL注入的常见方式:
1.在输入时添加等式,如登陆时在用户名文本框输入:'or 1=1--,假设程序的SQL语句为"select count(*) from Users where userName='"+txtUserName.Text+"', and password='"+txtPwd.Text+"'"那么输入以上信息后整条语句将变为:"select conut(*) from Users where userName=' 'or 1=1--" 其中password=将被注释掉
2.在语句中添加xp_cmdshell,xp_grantlogin,xp_regread等存储过程,这些存储过程都可以执行一些较为特殊的功能,如利用xp_cmdshell可以执行一些脚本程序或命令行语句,xp-regread能读取注册表信息
其他可能会影响系统安全的漏洞:
其中数据库的三个高危帐户也可能被利用,sa,ASP.NET工作进程帐户,最高权限帐户
应用程序的错误调试信息可能泄露系统的一些信息,不法分子可能利用这些信息来对系统造成攻击,如错误调试页输出的系统版本信息,不法分子会根据版本号寻找相应的系统漏洞来对系统进行破坏
对以上需要注意的地方,我们可以在系统设计时采取相应的预防措施,使程序避免上述攻击:
1.校验用户的输入信息,如使用.NET的验证控件,RegEx类(正则表达式)
2.参数化SQL语句,尽量使用存储过程,在效率上,执行存储过程也好过SQL语句
3.删除上述执行特殊功能的存储过程.
4.给应用程序最低的必要权限访问帐户,如:用户仅需查询某一张表,则仅赋予用户查询该张表的权限
5.使用别名来让ASP.NET帐户访问数据库
浙公网安备 33010602011771号