所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,这类表单特别容易受到SQL注入式攻击。SQL注入一直是WEB程序安全性的指标之一,也是必备防范的一种安全应用。那么,如何防止SQL注入呢?
限制类型
打个比方,比如有一个列表,用户可以输入一个数字跳到该页,像这种需求可以直接把输入框用JavaScript限制用户只能输入数字,其它字符不允许。PHP接收到参数的时候,直接判断是不是数字即可。
永远不要相信表单数据
表单的出现,是Web程序的一个里程碑,但也成为许多SQL注入的漏洞之一。永远记得:只要是用户输入的,就一定要进行相应的验证。
过滤特殊字符
比如说单引号,双引号,空格等其它一些特殊字符。为什么要过滤,你懂的。
可以写一个过滤函数
许多同学在过滤特殊字符的时候,都是用系统函数操作。这当然也可以,但不要指望系统函数能绝对保证,个人感觉自己写一个专门的过滤函数,就如同过滤关键字一样。多多学习正则表达式,把你想到的,目前最流行的注入式攻击关键字符都K掉
URL地址栏
这个也是继表单SQL注入之后最常见的SQL注入方式之一,注入方式跟表单式注入一样。
使用预处理
对于直接把用户输入的内容直接拼SQL语句是最危险的行为,我刚开始也尝到了苦头,贪图方便。使用预处理非常有效的防止SQL注入,而且在有些时候还能提高效率。.
前台后台都验证
一定要用JavaScript去验证前端输入的内容是否合法,然后再提交到后台程序,后台程序再验证,双管齐下。另外,使用JavaScript验证不仅提高效率,用户体验也非常棒!
少用输入框
只要是用户能输入的表单,那就都有一定的危险,尽量少使用输入框。如日期格式的数据可以使用年月日三个下拉菜单只供用户选择,页数可以使用数字下拉菜单,二选一的单选框等等。
对数据库及时补丁
有些环境一经装好后,几乎都不去看看是否有最新补丁发布,修补修补。一定要养成常去官网看看,有没有最新补丁发布,及时补上。
备份
这点应该说是日常工作了,花不了多少时间,Linux用户直接写一个定期执行脚本就搞定。就算是SQL注入导致数据库信息丢失,错乱了也能补救!