PHP与SQL注入攻击防范小技巧_php技巧
下面来谈谈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% 这样的查询语句失效。

热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

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

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

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

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

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

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

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

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