一.   防sql注入





1 ) .  防止sql注入的通常做法 : 




第一步 : 首先在前台页面对输入信息进行js验证,对一些特殊字符做出屏蔽<例子 : or,'',--,==>,对长度进行限制<例子 : 6-13位>,




第二步 : 另外为保证隐私性,对用户的敏感信息进行MD5加密,;为保证友好度,对一些详细的异常信息做出错误信息页面的定制 <例子 : 404,405>




第三步 : 对特定人分配特定的权限,而不是给其分配管理员权限


2 ) . sql 注入




2.1 描述 : 指通过一些含有特殊字符的sql语句发送到服务器欺骗服务器并进行攻击(特殊字符 : or,单引号,--,空格) 




3 ) .sql注入的防护须知




3.1 绝不信任用户的输入,对用户输入进行校验,可通过正则表达式(js正则或java后台正则),以及限制长度以及对单引号和双"-"进行转换等




3.2 绝不要使用动态拼装sql,请使用参数化sql-->永远不使用+号方式拼接sql字符串,而是使用?传参的方式进行




3.3 绝不要给用户过高的权限.而是根据需求进行赋权




3.4  对敏感信息进行加密,例 : md5 (单向加密,不可逆转)




3.5 自定义错误页面,目的是为了不把我们的程序bug暴露在别有用心的人面前,而去不会让用户看到报错的页面,同时也提高了用户体验度 




4 ) .sql注入的防护方式 :




4.1 输入验证




目的 : 检查用户输入的合法性,确信输入的内容只包含合法的数据




方式 : 通过在 客户端 和服务器端(java代码)都进行数据检查, 是为了 弥补客户端验证机制脆弱的安全性




原因 : 在客户端,攻击者可通过获取网页源代码,修改验证合法性脚本或删除脚本,来进行非法内容填写修改提交给服务器,因此服务器端必不可少




做法 : 客户端可使用Regular Expression Validator ,自动 生成验证用的客户端脚本 , 服务器端可通过Custom Validator自定义一个方法




4.2 错误消息处理





        目的 : 避免出现一些详细的错误信息,防止黑客利用错误信息






        方式 : 通过使用一种标准的输入确认机制来验证所有的输入数据的长度,类型,语句,企业规划等





4.3 加密处理





        目的 : 通过将用户输入的账号密码进行加密,从而以互不干涉的方式-->也就是用户输入的数据不再对数据库有特殊意义的方式防止攻击者注入sql命令






        方式 : 加密用户输入的数据,当使用的时候再次加密与数据库的密文进行对比登录





4.4 存储过程来执行所有的查询




        好处 : 使用特定sql参数传递方式 :




[1]防止攻击者利用单引号和连字符实施攻击,




[2]可使数据库权限限制到只允许特定的存储过程执行,




[3]使所有用户输入必须遵从被调用的存储过程的安全上下文




4.5 使用专业的漏洞扫描工具




现状 : 攻击者已可自动搜索攻击目标并实施攻击,其技术也是不可小觑




方式 : 投资专业的漏洞扫描工具,例如 : Acunetix的Web漏洞扫描程序




总结 : 一个完善的漏洞扫描程序不同于网络扫描程序,它是专门用来查找网站上的sql注入式漏洞,最新的漏洞扫描程序可以查找最新发现的漏洞





4.6 确保数据库安全




目的 :  通过锁定数据库,设定需用来访问的 w e b应用功能的最低权限, 撤销不必要的公共许可,使用强大的加密技术来保护敏感数据并维护审查跟踪




方式 : 若web应用无需访问哪些表,则无需给这些表的权限,若web应用只需读的权限,那么就禁止对此表的drop,insert,update,delete的权限,并确保数据库打了最新




4.7 安全评审 




        方式 : 




[1]部署应用系统前做安全评审




[2]在更新应用前对编码做安全评审

 

请记得始终做安全评审

 

 

 




     二. 数据库常用用语






1 ) . ddl-->Data Definition Language       -->  数据定义语言    :   Create Drop Alter


2 ) . dml-->Data Manipulation Language-->  数据操纵语言   :   insert update delete select


3 ) . dcl -->Data Control Language           -->  数据控制语言    :  grant revoke


4 ) . tcl -->Transaction Control Language-->  事务控制语言   :  commit  rollback