简答题 12.  什么是SQL注入?
【正确答案】所谓SQL注入(SQL Injection)就是通过把SQL命令插入到WEB表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令的目的。例如,在代码中使用下面的SQL语句:SQL="SELECT TOP 1*FROM USER WHERE NAME='''+NAME+'''AND PASSWORD='''+PASSWORD+'''"”来验证用户名和密码是否正确,其中,NAME和PASSWORD是用户输入的内容,当用户输入用户名为AA,密码为“BB或'A'='A'”,那么拼接出来的SQL语句就为“SELECT TOP 1*FROM USER WHERE NAME='AA' AND PASSWORD='BB' OR 'A'='A'”,那么只要USER表中有数据,这条SQL语句就会有返回结果。这就达到了SQL注入的目的。
   作为DBA,永远不要信任用户的输入,相反,必须认定用户输入的数据永远都是不安全的,对用户输入的数据必须都进行过滤处理。
   为了防止SQL注入,需要注意以下几个要点:
   (1)永远不要信任用户的输入。可以通过正则表达式或限制长度的方式对用户的输入进行校验;对单引号进行转换等。
   (2)永远不要使用动态拼装SQL,可以使用参数化的SQL或者直接使用存储过程进行数据查询、存取。
   (3)永远不要使用管理员权限的数据库连接,建议为每个应用赋予单独的权限。
   (4)不要把机密信息直接存放,建议对密码或敏感信息进行加密或HASH处理。
   (5)应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装。
   (6)SQL注入的检测一般采取辅助软件或借助网站平台,软件一般采用SQL注入检测工具JSKY,网站平台就有安全平台检测工具:MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效地防御SQL注入、XSS(Cross Site Scripting,跨站脚本攻击,为了不和层叠样式表(Cascading Style Sheets,CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS)攻击等。
【答案解析】