首页 后端开发 php教程 PHP与SQL注入攻击防范小技巧_php技巧

PHP与SQL注入攻击防范小技巧_php技巧

May 17, 2016 am 09:15 AM
注入攻击 防范

下面来谈谈SQL注入攻击是如何实现的,又如何防范。

 看这个例子:

复制代码 代码如下:

// supposed input
$name = "ilia'; DELETE FROM users;";
mysql_query("SELECT * FROM users WHERE name='{$name}'");

 很明显最后数据库执行的命令是:

SELECT * FROM users WHERE name=ilia; DELETE FROM users

 这就给数据库带来了灾难性的后果–所有记录都被删除了。

 不过如果你使用的数据库是MySQL,那么还好,mysql_query()函数不允许直接执行这样的操作(不能单行进行多个语句操作),所以你可以放心。如果你使用的数据库是SQLite或者PostgreSQL,支持这样的语句,那么就将面临灭顶之灾了。

 上面提到,SQL注入主要是提交不安全的数据给数据库来达到攻击目的。为了防止SQL注入攻击,PHP自带一个功能可以对输入的字符串进行处理,可以在较底层对输入进行安全上的初步处理,也即Magic Quotes。(php.ini magic_quotes_gpc)。如果magic_quotes_gpc选项启用,那么输入的字符串中的单引号,双引号和其它一些字符前将会被自动加上反斜杠\。

 但Magic Quotes并不是一个很通用的解决方案,没能屏蔽所有有潜在危险的字符,并且在许多服务器上Magic Quotes并没有被启用。所以,我们还需要使用其它多种方法来防止SQL注入。

 许多数据库本身就提供这种输入数据处理功能。例如PHP的MySQL操作函数中有一个叫mysql_real_escape_string()的函数,可将特殊字符和可能引起数据库操作出错的字符转义。

 看这段代码:
复制代码 代码如下:

//如果Magic Quotes功用启用
if (get_magic_quotes_gpc()) {
$name = stripslashes($name);
}else{
$name = mysql_real_escape_string($name);
}

mysql_query("SELECT * FROM users WHERE name='{$name}'");

 注意,在我们使用数据库所带的功能之前要判断一下Magic Quotes是否打开,就像上例中那样,否则两次重复处理就会出错。如果MQ已启用,我们要把加上的去掉才得到真实数据。

 除了对以上字符串形式的数据进行预处理之外,储存Binary数据到数据库中时,也要注意进行预处理。否则数据可能与数据库自身的存储格式相冲突,引起数据库崩溃,数据记录丢失,甚至丢失整个库的数据。有些数据库如 PostgreSQL,提供一个专门用来编码二进制数据的函数pg_escape_bytea(),它可以对数据进行类似于Base64那样的编码。

 如:
复制代码 代码如下:

// for plain-text data use:
pg_escape_string($regular_strings);

// for binary data use:
pg_escape_bytea($binary_data);

 另一种情况下,我们也要采用这样的机制。那就是数据库系统本身不支持的多字节语言如中文,日语等。其中有些的ASCII范围和二进制数据的范围重叠。

 不过对数据进行编码将有可能导致像LIKE abc% 这样的查询语句失效。
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
两个点博物馆:所有展览以及在哪里可以找到它们
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何使用Nginx防范LDAP注入攻击 如何使用Nginx防范LDAP注入攻击 Jun 10, 2023 pm 08:19 PM

随着网络安全漏洞增多,LDAP注入攻击已经成为了很多网站面临的安全隐患。为了保护网站安全,防范LDAP注入攻击,需要使用一些安全措施。其中,Nginx作为一个高性能的Web服务器和反向代理服务器,可以为我们提供很多便利和保护。这篇文章将介绍如何使用Nginx防范LDAP注入攻击。LDAP注入攻击LDAP注入攻击是一种针对LDAP数据库的攻击方式,攻击者通过在

Vue项目中的安全隐患及防范方法 Vue项目中的安全隐患及防范方法 Jun 11, 2023 pm 10:10 PM

Vue是一款流行的JavaScript框架,广泛用于构建单页面应用程序。在开发Vue项目时,安全问题是需要关注的一个关键问题,因为在一些不当的操作下,Vue可以成为攻击者攻击的目标。在本文中,我们将介绍Vue项目中常见的安全隐患,以及如何防范这些隐患。XSS攻击XSS攻击是指攻击者利用网站漏洞,通过注入代码的方式,实现对用户页面的篡改或者信息的盗取。在Vue

典型网络应用漏洞分析与防范 典型网络应用漏洞分析与防范 Jun 11, 2023 pm 08:36 PM

随着互联网的普及,网络应用的出现越来越多,各种网站、APP、小程序等无处不在。网络应用为我们带来了便利和娱乐,但同时也带来了安全隐患。网络应用漏洞的存在,很容易被黑客利用,从而导致数据泄露、个人信息被盗、账户被盗、网络攻击等安全问题。本文将从常见的网络应用漏洞入手,分析原因并提供防范措施。SQL注入漏洞SQL注入漏洞是一种被黑客利用来攻击数据库的一种常见漏洞

PHP安全防护:避免注入攻击 PHP安全防护:避免注入攻击 Jun 24, 2023 am 09:22 AM

在今天的网络世界中,网络安全问题是一大难题。无论是个人用户还是企业机构都需要对网络系统的安全性格外重视。特别是在网站的开发和维护过程中,注入攻击是一种常见的安全漏洞之一。而PHP作为一种在网站开发中广泛应用的编程语言,更是容易受到注入攻击。因此,本文将为您介绍PHP安全防护方法,以避免注入攻击。什么是注入攻击?首先,注入攻击指的是黑客利用网络系统中存在的漏洞

Nginx如何防范XML注入攻击 Nginx如何防范XML注入攻击 Jun 11, 2023 am 08:20 AM

XML注入攻击是一种常见的网络攻击方式,攻击者将恶意注入的XML代码传递给应用程序,以获取未授权的访问权限或执行恶意操作。Nginx是一款流行的Web服务器和反向代理服务器,可以通过多种方式来防范XML注入攻击。对输入进行过滤和验证对于所有输入到服务器的数据,包括XML输入,应该进行过滤和验证。Nginx提供了一些内置的模块,可以在代理请求到后端服务之前,对

如何使用Nginx防范apache flag注入攻击 如何使用Nginx防范apache flag注入攻击 Jun 10, 2023 pm 03:17 PM

在网络安全领域中,Apache标志注入攻击是一种比较常见的攻击方式,攻击者在利用某些漏洞或者特定的HTTP请求参数来伪造请求标头,从而欺骗服务器执行意外的操作或者执行恶意代码。为了防范这种攻击,我们可以将Nginx作为反向代理服务器来处理请求。下面介绍如何使用Nginx防范Apache标志注入攻击。设置Nginx反向代理Nginx在处理请求时,可以将请求转发

Go语言中的跨站点脚本(XSS)攻击防范:最佳实践和技巧 Go语言中的跨站点脚本(XSS)攻击防范:最佳实践和技巧 Jun 17, 2023 pm 12:46 PM

随着互联网的快速发展,网站安全问题已经成为了网络世界中的一大难题。跨站点脚本(XSS)攻击是一种常见的安全漏洞,它利用网站的弱点,将恶意脚本注入到网页中,从而对用户的信息进行窃取和篡改。Go语言作为一种高效、安全的编程语言,为我们提供了强有力的防范XSS攻击的工具和技巧。本文将介绍一些最佳实践和技巧,帮助Go语言开发者有效地预防和解决XSS攻击。对所有输入进

MySql的SQL注入攻击:如何防范和解决 MySql的SQL注入攻击:如何防范和解决 Jun 15, 2023 pm 10:16 PM

MySQL是一种常用的关系型数据库,虽然它拥有着安全性较高的特点,但也无时无刻不在面临SQL注入攻击的威胁。SQL注入攻击是一种常见的攻击方式,黑客会通过构造恶意的SQL查询语句来绕过应用程序的身份验证和授权,进而获取或者破坏数据库中的数据。下面,我们将会介绍SQL注入攻击,以及如何防范和解决这种攻击。SQL注入攻击的原理SQL注入攻击最基本的原理是通过在输

See all articles