PHP代码网站防范SQL注入漏洞攻击的建议

标签: php 代码 网站 | 发表时间:2014-03-07 10:58 | 作者:顺其自然EVO
出处:http://www.blogjava.net/qileilove/
 所有的网站管理员都会关心网站的安全问题。说到安全就不得不说到 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,要注意及时打上官方的补丁或升级到新的版本。如果有讲得不对的地方或不理解的请在评论区留言。


顺其自然EVO 2014-03-07 10:58 发表评论

相关 [php 代码 网站] 推荐:

PHP代码网站防范SQL注入漏洞攻击的建议

- - BlogJava-qileilove
 所有的网站管理员都会关心网站的安全问题. SQL注入攻击(SQL Injection). 黑客通过SQL注入攻击可以拿到网站. 数据库的访问权限,之后他们就可以拿到网站数据库中所有的数据,恶意的黑客可以通过SQL注入功能篡改数据库中的数据甚至会把数据库中的数据毁坏掉. 做为网络开发者的你对这种黑客行为恨之入骨,当然也有必要了解一下SQL注入这种功能方式的原理并学会如何通过代码来保护自己的网站数据库.

查看php代码的性能——xhprof

- - cloudfly
今天是头脑风暴,想测试一下现在做得项目的执行效率. google了一下,发现了xhprof,试了一试,感觉真是个神器啊. 就是facebook放出的一个开源的,用来测试php代码性能的工具. 在网上也搜到了Xdebug,但是都说特别耗资源. 而xhprof是个轻量级的,而且用户体验也相当不错. 官方地址: http://pecl.php.net/package/xhprof.

10个实用的PHP代码片段

- - ITeye资讯频道
作为一个PHP开发人员,经常收集一些代码片段是非常有益的,以备将来使用. 这些代码片段可以节省您宝贵的时间,也可以提高您的工作效率.  PHP数组生成 CSV 文件. 这的确是一个很简单的功能,从一个PHP数组生成一个.csv文件. 此函数使用 fputcsv PHP 内置函数生成逗号分隔文件(.CSV).

PHP代码优化24条真经

- - 外刊IT评论
使用echo的多重参数代替字符串连接. 在执行for循环之前确定最大循环数,不要每循环一次都计算最大值,最好运用foreach代替. 对global变量,应该用完就unset()掉. 用单引号代替双引号来包含字符串,这样做会更快一些. 因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会. 函数代替正则表达式完成相同功能.

PHP分页技术的代码和示例

- xx - 酷壳 - CoolShell.cn
本文来自:10 Helpful PHP Pagination Scripts For Web Developers. 分页是目前在显示大量结果时所采用的最好的方式. 有了下面这些代码的帮助,开发人员可以在多个页面中显示大量的数据. 在互联网上,分​页是一般用于搜索结果或是浏览全部信息(比如:一个论坛主题).

关于PHP的is_a()函数执行代码的问题

- Sam - 大风起兮云飞扬
    今天看到云舒在群里贴的漏洞公告,原始的文章在.     后来查了下PHP官方的手册,这个问题是在PHP 5.3.7中更新了is_a()函数的功能. is_a()经常被用于条件判断.     在此前版本的is_a() 的第一个参数如果不是object,则会返回false,现在变成了如果不是object ,则会去执行 __autoload()函数.

使用PHP解析行政区划代码

- - 火丁笔记
话说这个PHP脚本我已经写过好多次了,不过由于 国家统计局提供的数据格式有些许的变化,所以我又重写了一遍,问题既涉及到PHP,同时也涉及到MySQL,感觉很适合做面试题,这类问题往往最能反映出求职者的基本素质. 准备工作:需要下载 最新县及县以上行政区划代码,并保存成data.txt文件. 需要注意的是表的字符集和文件的字符集需要一致.

46 个非常有用的 PHP 代码片段

- - 程序师
在编写代码的时候有个神奇的工具总是好的. 下面这里收集了 40+ PHP 代码片段,可以帮助你开发 PHP 项目. 这些 PHP 片段对于 PHP 初学者也非常有帮助,非常容易学习,让我们开始学习吧~. 在开发 Web 或者移动应用的时候,经常会遇到需要发送 SMS 给用户,或者因为登录原因,或者是为了发送信息.

15个优秀的PHP免费在线学习网站

- Michael Liao - ITeye资讯频道
PHP是一种功能强大的服务器端脚本语言,旨在帮助Web开发人员快速开发动态页面. 本文为您介绍15个优秀的PHP免费在线学习网站,希望对您学习PHP有所帮助. 感谢 小兔虎 投递这篇新闻. 声明:本文系ITeye网站发布的原创新闻,严禁任何网站转载本文,否则必将追究法律责任. 新闻来源:Bastovanov.

救命:如何修复被挂木马的php网站

- - 鲁塔弗的博客
有个朋友的网站长期没有人管理,而网站PR=4,于是网站被人攻陷,首页加上了上百条黑链,找我帮忙修复. 看到首页密密麻麻的黑链,第一反应就是头大. 最简单的办法: 格式化后重装系统. 但是这个服务器web/数据库都部署在同一台上,数据规模有200多G,当初安装的时候也没有分区,在线迁移数据太麻烦了,只能硬着头皮去修复问题,步骤如下.