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 CLI实现简单的数据库实时监控调度
Jul 01 PHP
php Rename 更改文件、文件夹名称
May 24 PHP
php入门学习知识点五 关于php数组的几个基本操作
Jul 14 PHP
解析yii数据库的增删查改
Jun 20 PHP
php中的字符编码转换函数用法示例
Oct 20 PHP
PHP中使用循环实现的金字塔图形
Nov 08 PHP
DEDECMS首页调用图片集里的多张图片
Jun 05 PHP
php通过淘宝API查询IP地址归属等信息
Dec 25 PHP
form表单传递数组数据、php脚本接收的实例
Feb 09 PHP
详解PHP函数 strip_tags 处理字符串缺陷bug
Jun 11 PHP
PHP使用 Imagick 扩展实现图片合成,圆角处理功能示例
Sep 09 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
Mar 26 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
颠覆常识!无色透明的咖啡诞生了(中日双语)
2021/03/03 咖啡文化
PHP中使用unset销毁变量并内存释放问题
2012/07/05 PHP
PHP生成随机密码类分享
2014/06/25 PHP
php mb_substr()函数截取中文字符串应用示例
2014/07/29 PHP
JQuery与Ajax常用代码实现对比
2009/10/03 Javascript
前后台交互过程中json格式如何解析以及如何生成
2012/12/26 Javascript
jQuery动画显示和隐藏效果实例演示(附demo源码下载)
2015/12/31 Javascript
js判断当前页面用什么浏览器打开的方法
2016/01/06 Javascript
jquery中取消和绑定hover事件的实现代码
2016/06/02 Javascript
理解javascript async的用法
2017/08/22 Javascript
jQuery实现弹窗下底部页面禁止滑动效果
2017/12/19 jQuery
CentOS环境中MySQL修改root密码方法
2018/01/07 Javascript
解决layui使用layui-icon出现默认图标的问题
2019/09/11 Javascript
Echarts实现单条折线可拖拽效果
2019/12/19 Javascript
js函数柯里化的方法和作用实例分析
2020/04/11 Javascript
[46:48]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第三局
2016/02/25 DOTA
[01:45:05]VGJ.T vs Newbee Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
python里将list中元素依次向前移动一位
2014/09/12 Python
python利用datetime模块计算时间差
2015/08/04 Python
浅析Python中的getattr(),setattr(),delattr(),hasattr()
2016/06/14 Python
Python中对象的引用与复制代码示例
2017/12/04 Python
python 读取txt中每行数据,并且保存到excel中的实例
2018/04/29 Python
解析Python3中的Import
2019/10/13 Python
Pytorch 中retain_graph的用法详解
2020/01/07 Python
python3的pip路径在哪
2020/06/23 Python
Python tkinter制作单机五子棋游戏
2020/09/14 Python
Python利用matplotlib绘制散点图的新手教程
2020/11/05 Python
印度在线内衣和时尚目的地:Zivame
2017/09/28 全球购物
英国在线药房和在线药剂师:Chemist 4 U
2020/01/05 全球购物
教师节演讲稿
2014/05/06 职场文书
乡镇安全生产目标责任书
2014/07/23 职场文书
2014年科普工作总结
2014/12/06 职场文书
2015年个人思想总结
2015/03/09 职场文书
简爱读书笔记
2015/06/26 职场文书
2016年“我们的节日·中秋节”活动总结
2016/04/05 职场文书
祝福语集锦:送给毕业同学祝福语
2019/11/21 职场文书