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 静态变量的初始化
Nov 15 PHP
浅谈web上存漏洞及原理分析、防范方法(文件名检测漏洞)
Jun 29 PHP
一个图片地址分解程序(用于PHP小偷程序)
Aug 23 PHP
yii中widget的用法
Dec 03 PHP
php实现session自定义会话处理器的方法
Jan 27 PHP
支持中文的PHP按字符串长度分割成数组代码
May 17 PHP
php-redis中的sort排序函数总结
Jul 08 PHP
php实现异步数据调用的方法
Dec 24 PHP
支付宝服务窗API接口开发php版本
Jul 20 PHP
php封装的验证码类分享
Feb 26 PHP
laravel 修改记住我功能的cookie保存时间的方法
Oct 14 PHP
详解PHP Swoole与TCP三次握手
May 27 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 获取客户端的真实ip
2009/11/30 PHP
Thinkphp将二维数组变为标签适用的一维数组方法总结
2014/10/30 PHP
PHP使用递归方式列出当前目录下所有文件的方法
2015/06/02 PHP
laravel框架关于搜索功能的实现
2018/03/15 PHP
PHP 访问数据库配置通用方法(json)
2018/05/20 PHP
PHP反射基础知识回顾
2020/09/10 PHP
JavaScript 编程引入命名空间的方法与代码
2007/08/13 Javascript
js用图作提交按钮或超连接
2008/03/26 Javascript
jQuery弹出层插件简化版代码下载
2008/10/16 Javascript
用Javascript数组处理多个字符串的连接问题
2009/08/20 Javascript
比Jquery的document.ready更快的方法
2010/04/28 Javascript
JavaScript对象链式操作代码(jquery)
2010/07/04 Javascript
利用ajaxfileupload插件实现文件上传无刷新的具体方法
2013/06/08 Javascript
浅析JS中document对象的一些重要属性
2014/03/06 Javascript
javascript每日必学之循环
2016/02/19 Javascript
JS简单实现tab切换效果的多窗口显示功能
2016/09/07 Javascript
bootstrap实现图片自动轮播
2016/12/21 Javascript
利用node.js写一个爬取知乎妹纸图的小爬虫
2017/05/03 Javascript
小程序如何使用分包加载的实现方法
2019/05/22 Javascript
vue.js 解决v-model让select默认选中不生效的问题
2020/07/28 Javascript
Vue实现购物小球抛物线的方法实例
2020/11/22 Vue.js
[49:05]OG vs Newbee 2019DOTA2国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
python操作ie登陆土豆网的方法
2015/05/09 Python
Python竟能画这么漂亮的花,帅呆了(代码分享)
2017/11/15 Python
解决sublime+python3无法输出中文的问题
2018/12/12 Python
HTML5中的nav标签学习笔记
2016/06/24 HTML / CSS
德国在线购买葡萄酒网站:Geile Weine
2019/09/24 全球购物
Hashtable 添加内容的方式有哪几种,有什么区别?
2012/04/08 面试题
自荐信格式范文
2013/10/07 职场文书
仓库班组长岗位职责
2013/12/12 职场文书
电脑售后服务承诺书
2014/03/27 职场文书
法定代表人授权委托书格式
2014/10/14 职场文书
开除通知书范本
2015/04/25 职场文书
2015年党员创先争优公开承诺书
2015/04/27 职场文书
倡议书的格式写法
2015/04/28 职场文书
诗词赏析-(浣溪沙)
2019/08/13 职场文书