PHP代码网站如何防范SQL注入漏洞攻击建议分享


Posted in PHP onMarch 01, 2012

黑客通过SQL注入攻击可以拿到网站数据库的访问权限,之后他们就可以拿到网站数据库中所有的数据,恶意的黑客可以通过SQL注入功能篡改数据库中的数据甚至会把数据库中的数据毁坏掉。做为网络开发者的你对这种黑客行为恨之入骨,当然也有必要了解一下SQL注入这种功能方式的原理并学会如何通过代码来保护自己的网站数据库。今天就通过PHP和MySQL数据库为例,分享一下我所了解的SQL注入攻击和一些简单的防范措施和一些如何避免SQL注入攻击的建议。
什么是SQL注入(SQL Injection)?
简单来说,SQL注入是使用代码漏洞来获取网站或应用程序后台的SQL数据库中的数据,进而可以取得数据库的访问权限。比如,黑客可以利用网站代码的漏洞,使用SQL注入的方式取得一个公司网站后台数据库里所有的数据信息。拿到数据库管理员登录用户名和密码后黑客可以自由修改数据库中的内容甚至删除该数据库。SQL注入也可以用来检验一个网站或应用的安全性。SQL注入的方式有很多种,但本文将只讨论最基本的原理,我们将以PHP和MySQL为例。本文的例子很简单,如果你使用其它语言理解起来也不会有难度,重点关注SQL命令即可。
一个简单的SQL注入攻击案例
假如我们有一个公司网站,在网站的后台数据库中保存了所有的客户数据等重要信息。假如网站登录页面的代码中有这样一条命令来读取用户信息。

<? 
$q = "SELECT `id` FROM `users` WHERE `username`= ' " .$_GET['username']. " ' AND `password`= ' " .$_GET['password']. " ' "; 
?>

现在有一个黑客想攻击你的数据库,他会尝试在此登录页面的用户名的输入框中输入以下代码:
' ; SHOW TABLES;
点击登陆键,这个页面就会显示出数据库中的所有表。如果他现在使用下面这行命令:
'; DROP TABLE [table name];
这样他就把一张表删除了!
当然,这只是一个很简单的例子,实际的SQL注入方法比这个要复杂得多,黑客也愿意花大量的时间来不断尝试来攻击你的代码。有一些程序软件也可以自动地来不断尝试SQL注入攻击。了解了SQL注入的攻击原理后,我们来看一下如何防范SQL注入攻击。
防范SQL注入 - 使用mysql_real_escape_string()函数
在数据库操作的代码中用这个函数mysql_real_escape_string()可以将代码中特殊字符过滤掉,如引号等。如下例:
<? 
$q = "SELECT `id` FROM `users` WHERE `username`= ' " .mysql_real_escape_string( $_GET['username'] ). " ' AND `password`= ' " .mysql_real_escape_string( $_GET['password'] ). " ' "; 
?>

防范SQL注入 - 使用mysql_query()函数
mysql_query()的特别是它将只执行SQL代码的第一条,而后面的并不会执行。回想在最前面的例子中,黑客通过代码来例后台执行了多条SQL命令,显示出了所有表的名称。所以mysql_query()函数可以取到进一步保护的作用。我们进一步演化刚才的代码就得到了下面的代码:
<? 
//connection 
$database = mysql_connect("localhost", "username","password"); 
//db selection 
mysql_select_db("database", $database); 
$q = mysql_query("SELECT `id` FROM `users` WHERE `username`= ' " .mysql_real_escape_string( $_GET['username'] ). " ' AND `password`= ' " .mysql_real_escape_string( $_GET['password'] ). " ' ", $database); 
?>

除此之外,我们还可以在PHP代码中判断输入值的长度,或者专门用一个函数来检查输入的值。所以在接受用户输入值的地方一定要做好输入内容的过滤和检查。当然学习和了解最新的SQL注入方式也非常重要,这样才能做到有目的的防范。如果使用的是平台式的网站系统如Wordpress,要注意及时打上官方的补丁或升级到新的版本。如果有讲得不对的地方或不理解的请在评论区留言。
PHP 相关文章推荐
PHP 柱状图实现代码
Dec 04 PHP
php中文验证码实现示例分享
Jan 12 PHP
php获取中文拼音首字母类和函数分享
Apr 24 PHP
php缩放gif和png图透明背景变成黑色的解决方法
Oct 14 PHP
Json_encode防止汉字转义成unicode的方法
Feb 25 PHP
非常经典的PHP文件上传类分享
May 15 PHP
php生成与读取excel文件
Oct 14 PHP
Yii框架批量插入数据扩展类的简单实现方法
May 23 PHP
PHP实现的AES加密、解密封装类与用法示例
Aug 02 PHP
laravel 框架配置404等异常页面
Jan 07 PHP
浅谈laravel-admin form中的数据,在提交后,保存前,获取并进行编辑
Oct 21 PHP
phpcmsv9.0任意文件上传漏洞解析
Oct 20 PHP
PHP和JAVA中的重载(overload)和覆盖(override) 介绍
Mar 01 #PHP
JS中encodeURIComponent函数用php解码的代码
Mar 01 #PHP
PHP设计模式之装饰者模式
Feb 29 #PHP
php preg_filter执行一个正则表达式搜索和替换
Feb 27 #PHP
mysql总结之explain
Feb 27 #PHP
php&amp;mysql 日期操作小记
Feb 27 #PHP
MySQL时间字段究竟使用INT还是DateTime的说明
Feb 27 #PHP
You might like
php cookies中删除的一般赋值方法
2011/05/07 PHP
PHP导出EXCEL快速开发指南--PHPEXCEL的使用详解
2013/06/03 PHP
php实现遍历目录并删除指定文件中指定内容
2015/01/21 PHP
全新Mac配置PHP开发环境教程
2016/02/03 PHP
由浅到深了解JavaScript类
2006/09/08 Javascript
Javascript中的常见排序算法
2007/03/27 Javascript
JavaScript DOM学习第六章 表单实例
2010/02/19 Javascript
javascript jscroll模拟html元素滚动条
2012/12/18 Javascript
Javascript合并表格中具有相同内容单元格示例
2013/08/11 Javascript
自定义jquery模态窗口插件无法在顶层窗口显示问题
2014/05/29 Javascript
node.js学习总结之调式代码的方法
2014/06/25 Javascript
浅谈React 属性和状态的一些总结
2016/11/21 Javascript
jQuery中animate的几种用法与注意事项
2016/12/12 Javascript
详解JavaScript的闭包、IIFE、apply、函数与对象
2016/12/21 Javascript
input获取焦点时底部菜单被顶上来问题的解决办法
2017/01/24 Javascript
基于JavaScript实现本地图片预览
2017/02/08 Javascript
jQuery实现弹幕效果
2017/02/17 Javascript
解决Vue-cli npm run build生产环境打包,本地不能打开的问题
2018/09/20 Javascript
vuex管理状态 刷新页面保持不被清空的解决方案
2019/11/11 Javascript
js实现登录拖拽窗口
2020/02/10 Javascript
jQuery实现雪花飘落效果
2020/08/02 jQuery
JavaScript实现网页下拉菜单效果
2020/11/20 Javascript
vue项目如何监听localStorage或sessionStorage的变化
2021/01/04 Vue.js
[58:09]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第三场 6.2
2018/06/03 DOTA
Python 字符串操作方法大全
2014/03/11 Python
python网络编程实例简析
2014/09/26 Python
在Python中的Django框架中进行字符串翻译
2015/07/27 Python
Python可变参数*args和**kwargs用法实例小结
2018/04/27 Python
美国伴娘礼服商店:Evening Collective
2019/10/07 全球购物
泰国排名第一的家居用品中心:HomePro
2020/11/18 全球购物
Linux开机引导的步骤是什么
2014/02/26 面试题
2014年导购员工作总结
2014/11/18 职场文书
2015年普法依法治理工作总结
2015/05/26 职场文书
王亚平太空授课观后感
2015/06/12 职场文书
给校长的建议书范文
2015/09/14 职场文书
mysq启动失败问题及场景分析
2021/07/15 MySQL