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

2015-01-24信息快讯网

所有的网站管理员都会关心网站的安全问题。说到安全就不得不说到SQL注入攻击(SQL Injection)

黑客通过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,要注意及时打上官方的补丁或升级到新的版本。如果有讲得不对的地方或不理解的请在评论区留言。
win7+apache+php+mysql环境配置操作详解
浅谈php中mysql与mysqli的区别分析
探讨php中防止SQL注入最好的方法是什么
PHP获取当前页面完整URL的实现代码
php批量上传的实现代码
PHP在不同页面间传递Json数据示例代码
PHP计数器的实现代码
解析dedeCMS验证码的实现代码
深入理解php的MySQL连接类
深入探讨:PHP使用数据库永久连接方式操作MySQL的是与非
Php中用PDO查询Mysql来避免SQL注入风险的方法
php中防止SQL注入的最佳解决方法
php判断终端是手机还是电脑访问网站的思路及代码
屏蔽机器人从你的网站搜取email地址的php代码
深入了解 register_globals (附register_globals=off 网站打不开的解决方法)
细谈php中SQL注入攻击与XSS攻击
PHP版网站缓存加快打开速度的方法分享
无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装(win+linux)
Php Ctemplate引擎开发相关内容
PHP和JAVA中的重载(overload)和覆盖(override) 介绍
JS中encodeURIComponent函数用php解码的代码
mysql总结之explain
php&mysql 日期操作小记
MySQL时间字段究竟使用INT还是DateTime的说明
php explode函数实例代码
支持中文字母数字、自定义字体php验证码代码
php tp验证表单与自动填充函数代码
php模拟post行为代码总结(POST方式不是绝对安全)
PHP备份数据库生成SQL文件并下载的函数代码
PHP将整个网站生成HTML纯静态网页的方法总结
PHP持久连接mysql_pconnect()函数使用介绍
Ping服务的php实现方法,让网站快速被收录
PHP中全面阻止SQL注入式攻击分析小结
PHP的SQL注入过程分析
选择PHP作为网站开发语言的原因分享
PHP 小心urldecode引发的SQL注入漏洞
基于Snoopy的PHP近似完美获取网站编码的代码
PHP与SQL注入攻击防范小技巧
PHP中通过语义URL防止网站被攻击的方法分享
PHP的SQL注入实现(测试代码安全不错)
©2014-2024 dbsqp.com