一、SQL注入简介: 1、简单而言,由于程序在执行SQL数据库操作之前,没有对用户的输入进行验证,导致非法用户捏造的SQL语句也被数据库引擎当做正常SQL语句被执行的现象; 2、非法用户捏造的SQL语句可以获得用户名密码、修改用户名密码、提升用户权限、修改数据库结构、修改/删除数据、向数据库挂马、破坏服务器等一系列破坏活动; 3、一些程序开发高手写了许多专门用于注入的软件,一般人使用也能达到很好的效果,因此,防御SQL注入势在必行。
二、SQL注入原理: 1、SQL命令字符串可以使用分号连接,因此一般的查询 1、SQL命令可查询、插入、更新、删除等,命令的串接。而以分号字符为不同命令的区别。(原本的作用是用于SubQuery或作为查询、插入、更新、删除……等的条件式) 2、SQL命令对于传入的字符串参数是用单引号字符所包起来。《但连续2个单引号字符,在SQL数据库中,则视为字符串中的一个单引号字符》 3、SQL命令中,可以夹带注解《连续2个减号字符——后的文字为注解,或“/*”与“*/”所包起来的文字为注解》 4、因此,如果在组合SQL的命令字符串时,未针对单引号字符作取代处理的话,将导致该字符变量在填入命令字符串时,被恶意窜改原本的SQL语法的作用。
三、SQL注入危害: 1、引起数据库资料外泄,例如机密数据,账户数据、密码数据等,也可能被修改用户名密码; 2、修改数据库结构、修改/删除数据、向数据库挂马、破坏服务器等一系列破坏活动; 3、数据结构被黑客探知,得以做进一步攻击(例如SELECT * FROM sys.tables); 4、数据库服务器被攻击,系统管理员帐户被窜改(例如ALTER LOGIN sa WITH PASSWORD='xxxxxx'); 5、取得系统较高权限后,有可能得以在网页加入恶意链接以及XSS; 6、经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统(例如xp_cmdshell 'net stop iisadmin'可停止服务器的IIS服务); 7、破坏硬盘数据(例如xp_cmdshell 'FORMAT D:')。
四、如何防范SQL注入: 1、在设计程序时,采用参数化查询来访问数据库,不给客户端输入SQL语句的机会; 2、生成静态页面,不执行客户端的SQL语句请求; 3、对输入的字符串做验证,含有注入关键词的(如:and select from)GET和POST提交等都拦截或者替换掉,但是可能导致正常用户的提交也被错误的拦截; 4、使用更高级的SQL防注入系统,防御GET/POST/Cookie等方式的注入。
|