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

黑客通过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,要注意及时打上官方的补丁或升级到新的版本。如果有讲得不对的地方或不理解的请在评论区留言。

时间: 2024-10-01 23:10:47

PHP代码网站如何防范SQL注入漏洞攻击建议分享_php技巧的相关文章

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

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

asp终极防范SQL注入漏洞

下面给出4个函数,足够你抵挡一切SQL注入漏洞!读懂代码,你就能融会贯通. 注意要对所有的request对象进行过滤:包括 request.cookie, request.ServerVariables 等等容易被忽视的对象: 复制代码 代码如下: function killn(byval s1) '过滤数值型参数 if not isnumeric(s1) then killn=0 else if s1<0 or s1>2147483647 then killn=0 else killn=cl

asp终极防范SQL注入漏洞_应用技巧

下面给出4个函数,足够你抵挡一切SQL注入漏洞!读懂代码,你就能融会贯通. 注意要对所有的request对象进行过滤:包括 request.cookie, request.ServerVariables 等等容易被忽视的对象: 复制代码 代码如下: function killn(byval s1) '过滤数值型参数 if not isnumeric(s1) then killn=0 else if s1<0 or s1>2147483647 then killn=0 else killn=cl

Oracle Advanced Support系统SQL注入漏洞挖掘经验分享

Oracle Advanced Support系统SQL注入漏洞分析 一年多前我在客户的一个外部环境中执行渗透测试,任何外部环境渗透测试的重要步骤之一就是挖掘出可访问的WEB服务.nmap和EveWitness的结合会令这步骤变得更快,因为我们可以进行端口扫描 并且把这些结果以屏幕截图的形式导入到 EyeWitness中.当梳理完 EyeWitness提供的屏幕截图页面后,我发现了一个Oracle 高级支持服务. 虽然我之前从没听过Oracle Advanced Support,但是当我很快的g

php中防止SQL注入的最佳解决方法_php技巧

如果用户输入的是直接插入到一个SQL语句中的查询,应用程序会很容易受到SQL注入,例如下面的例子: 复制代码 代码如下: $unsafe_variable = $_POST['user_input'];mysql_query("INSERT INTO table (column) VALUES ('" . $unsafe_variable . "')"); 这是因为用户可以输入类似VALUE"); DROP TABLE表; - ,使查询变成: 复制代码 代

批量替换sqlserver数据库挂马字段并防范sql注入攻击的代码

首先备份数据库,以防不必要的损失.而后对所有被挂马的小于8000字符的varchar字段执行 复制代码 代码如下: update 表名 set 字段名=replace(字段名,'<Script Src=http://c.n%75clear3.com/css/c.js></Script>','') 其中<Script Src=http://c.n%75clear3.com/css/c.js></Script>为挂马字段.执行后挂马字段被清除.但是有部分字段,比

白帽子发现美军网站SQL注入漏洞,可获取敏感数据

去年有报道称,美军收购软件漏洞为网战准备.而美军自己的网站和服务器究竟又有多安全?一名独立安全研究者已经发现了美军网站的几个较为严重的安全漏洞. 安全专家称,这些漏洞说明了美国防部网络安全基础的脆弱性,攻击这些军方公共站点以及职员门户要比进入五角大楼容易得多. 美军网站惊现SQL注入漏洞 漏洞发现者研究者名为MLT,他表示在美军国防合同管理局(DCMA)网站子域中,存在严重漏洞.攻击者可以利用该漏洞泄露国防部(DoD)雇员的个人信息,其中包括姓名.住址等. 尽管MLT并没有对漏洞进行利用,他仍摆

开发者论坛一周精粹(第九期):Joomla!3.7.0 Core SQL注入漏洞

第九期(2017年5月15日-2017年5月21日 ) 2017年5月17日,国外研究人员发现开源CMS软件Joomla!3.7.0 Core 版本里面发现一个SQL注入漏洞攻击,该漏洞风险较高,可能存在数据泄露的风险. [漏洞公告]Joomla!3.7.0 Core SQL注入漏洞 作者:正禾 码栈惊喜赋能618大促 释放工作量轻松备战! 作者:码栈小二 终极告白--com域名批量注册39元/首年! 作者:万小域 是时候亮出你的wang牌了!wang注册/续费/转入限时优惠! 作者:万小域 五

预防查询语句数据库注入漏洞攻击

简单地说,Sql注入就是将Sql代码传递到应用程序的过程,但不是按照应用程序开发人员预定或期望的方式插入,相当大一部分程序员在编写代码的时 候,并没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患.这种漏洞并非系统照成,而是由程序员在编程中忽略了安全因素.Sql注入漏洞攻击原 理就是利用非法参数获得敏感信息,收集整理,分析出管理员账号密码. 当开发应用程序时,尤其是有关数据库信息的查询,查询语句中可能会有拼接字符串注入漏洞,这便会导致用户资料泄露.那么该如何防范此类漏洞的出现. 可以为查