SQL注入的原理
什么SQL注入
将SQL代码插入到应用程序的输入参数中,之后,SQL代码被传递到数据库执行。从而达到对应用程序的攻击目的。
注入原理
常见攻击方法
检测是否可以注入【检测注入点】
示例:http://192.168.0.1/temp.aspx?id=a or 1=1--
如果上面语句可以执行说明可以实现注入,则可以
利用系统过程、系统表注入数据库
示例【给系统添加一个用户,黑客可以实现远程登录控制服务器】:http://192.168.0.1/temp.aspx?id=1;exec xp_cmdshell 'net user admin 123456 /add'
绕过程序的限制
示例:程序中往往限制单引号的数据,但是黑客传入单引号的ASCII码
跨站点注入
在Web页面挂某些恶意的HTML、JavaScript代码
防范SQL注入
限制错误信息的输出,避免错误信息的输出使得黑客知道网站的技术实现采用什么数据库,采用什么平台
示例:在Web.config文件中设置
<customErrors mode="On" defaultRedirect="error.aspx">
</customErros>
限制访问数据库账号的权限
在开发应用系统的时候就应该限制,给程序最小访问数据库的权限
使用参数命令传递参数
不要使用拼接字符串的方式构造SQL语句而采用参数命令
使用存储过程
存储过程在数据库中
只能执行存储过程中固定的代码
限制输入长度
防止黑客输入超大字符串,导致服务器瘫痪
防止黑客输入较长的恶意脚本等
实现方法:文本框的MaxLength属性
URL重写技术
示例: http://testWeb/news.aspx?id=111
重写成:http://testWeb/10101111.html
传递参数尽量不用字符串
http://testWeb/news.aspx?id=111 and 1=1【黑色部分给了SQL注入的机会】
SQL优化
为什么要优化
开发是对性能考虑不多【技术差、项目工期紧等原因没有考虑性能问题】
系统运行中,数据量扩大,访问量增多,蹩脚的SQL危害开始显露
低效SQL的危害
系统响应变慢,软件开发中的8秒定律,当打开一个软件或网页超过8秒时间还没有显示,则响应太慢。
死锁,当不同用户都访问某些资源的时候SQL语句不当导致死锁
客户失去信心,软件失败