SQL注入攻击是黑客攻击网站最常用的手段。如果你的站点没有使用严格的用户输入检验,那么常容易遭到SQL注入攻击。SQL注入攻击通常通过给站点数据库提交不良的数据或查询语句来实现,很可能使数据库中的纪录遭到暴露,更改或被删除。

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

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

许多数据库本身就提供这种输入数据处理功能。例如PHP的MySQL操作函数中有addslashes()、mysql_real_escape_string()、mysql_escape_string()等函数,可将特殊字符和可能引起数据库操作出错的字 符转义。那么这三个功能函数之间有什么却别呢?下面我们就来详细讲述下。

虽然国内很多PHP程序员仍在依靠addslashes防止SQL注入,还是建议大家加强中文防止SQL注入的检查。addslashes的问题在 于黑客 可以用0xbf27来代替单引号,而addslashes只是将0xbf27修改为0xbf5c27,成为一个有效的多字节字符,其中的0xbf5c仍会 被看作是单引号,所以addslashes无法成功拦截。

当然addslashes也不是毫无用处,它是用于单字节字符串的处理,多字节字符还是用mysql_real_escape_string吧。
另外对于php手册中get_magic_quotes_gpc的举例:

if (!get_magic_quotes_gpc()) {$lastname = addslashes($_POST[‘lastname’]);
} else {$lastname = $_POST[‘lastname’];
}

最好对magic_quotes_gpc已经开放的情况下,还是对$_POST[’lastname’]进行检查一下。

再说下mysql_real_escape_string和mysql_escape_string这2个函数的区别:
mysql_real_escape_string 必须在(PHP 4 >= 4.3.0, PHP 5)的情况下才能使用。否则只能用 mysql_escape_string ,两者的区别是:mysql_real_escape_string 考虑到连接的当前字符集,而mysql_escape_string 不考虑。

总结一下:

  • addslashes() 是强行加/;
  • mysql_real_escape_string() 会判断字符集,但是对PHP版本有要求;
  • mysql_escape_string不考虑连接的当前字符集。

dz中的防止sql注入就是用addslashes这个函数,同时在dthmlspecialchars这个函数中有进行一些替换$string = preg_replace(‘/&((#(/d{3,5}|x[a-fA-F0-9]{4}));)/’, ‘&//1’,这个替换解决了注入的问题,同时也解决了中文乱码的一些问题。

http://blog.csdn.net/hellollx/article/details/5399760

PHP防止SQL注入自带函数分析相关推荐

  1. JDBC:使用Statement操作数据库时产生的SQL注入问题原因分析

    SQL注入问题简单介绍 1.JDBC中使用Stement对数据库增删改查, 执行sql语句时使用拼接字符串会导致SQL注入 2.JDBC中使用PreaparedStement可以有效避免SQL注入问题 ...

  2. 【甄选靶场】Vulnhub百个项目渗透——项目七:DerpNStink-1(sql注入,流量分析)

    Vulnhub百个项目渗透 Vulnhub百个项目渗透--项目七:DerpNStink-1 (sql注入,流量分析) 靶场环境 提取码:rong

  3. 关于SQL注入的一些分析

    目录 一.sql注入原理 二. sql注入的类型介绍 按照注入点类型来分类 按照数据提交的方式来分类 按照执行效果来分类 三.sql漏洞探测方法 四.sql注入实例 1.union联合查询 2.boo ...

  4. thinkphp日志泄漏漏洞_ThinkPHP框架通杀所有版本的一个SQL注入漏洞详细分析及测试方法...

    ThinkPHP 3.1.3及之前的版本存在一个SQL注入漏洞,漏洞存在于ThinkPHP/Lib/Core/Model.class.php 文件 根据官方文档对"防止SQL注入" ...

  5. 测试php框架漏洞,ThinkPHP框架通杀所有版本的一个SQL注入漏洞详细分析及测试方法...

    作者: seay 下面是摘自thinkphp官方的一个公告,官方直接贴出这些东西是非常不负责的行为,跟上次apache公开的Struts2的代码执行一样的行为,会造成很多用户被黑.建议类似的厂商不要再 ...

  6. /plus/recommend.php sql注入漏洞,代码审计:ThinkPHP框架通杀所有版本的一个SQL注入漏洞详细分析及测试方法 | Seay 渗透 编程 代码审计 网络安全博客...

    显示不全请点击全屏阅读 下面是摘自thinkphp官方的一个公告,官方直接贴出这些东西是非常不负责的行为,跟上次apache公开的Struts2的代码执行一样的行为,会造成很多用户被黑.建议类似的厂商 ...

  7. web安全入门(第四章-1)SQL注入的原理分析

    1.SQL注入本质 注入攻击的本质,是把用户输入的数据当作代码执行这有两个条件: 第一个是用户能够控制输入 第二个是原本程序要执行的代码,拼接里用户输入的数据然后执行sql注入就是针对sql语句的注入 ...

  8. sql注入的原理分析

    1.知识点一:什么是sql注入? 用户输入的内容被网站当做数据库语句进行执行.关键点:输入的内容 一定要是[数据库语句]. 用户输入的内容: 我们输入的内容. 在一个网站上能够输入的地方:     1 ...

  9. 参数化查询为什么能够防止SQL注入

    很多人都知道SQL注入,也知道SQL参数化查询可以防止SQL注入,可为什么能防止注入却并不是很多人都知道的. 本文主要讲述的是这个问题,也许你在部分文章中看到过这块内容,当然了看看也无妨. 首先:我们 ...

最新文章

  1. python二进制打开(rb)和文本格式打开(r)什么区别?
  2. 关于数据库优化1——关于count(1),count(*),和count(列名)的区别,和关于表中字段顺序的问题...
  3. 【发布】温度监测报警器v1.2a内测版!
  4. 『mcse 2008基础架构』Chapter 01 IP协议及配置方法 第1课网络连接及配置方法
  5. 快速排序到底有多快?
  6. 微信小程序将页面按钮悬浮固定在底部
  7. C++ 11 深度学习(十)多线程
  8. OpenCV之图像平滑处理
  9. C# DataGridView 全选 反选
  10. 华为路由器OSPF配置
  11. cad如何多选对象_cad中选择对象,不小心多选了一条线,怎么取消这个多选的家伙...
  12. 鸿蒙系统图标大小怎么调节,华为手机桌面图标大小怎么调?用华为手机的朋友这些技巧需要了解...
  13. 看图写英语作文关于计算机,终于懂了看图写英语作文模板
  14. activti面试突击
  15. Python爬虫 | 2008-2018年各省专利统计数据
  16. 智课雅思词汇---二十五、-ate
  17. DZone每日必读-news: 指导软件团队取得成功的 4 种方法
  18. 关于WPF的资源引用问题
  19. CAD图纸转换TIFF格式时修改背景颜色
  20. K_A07_003 基于 STM32等单片机驱动DRV8825模块按键控制步进电机正反转

热门文章

  1. 美防长来了,HTML5 画个星条旗(美国国旗)
  2. delphi mysql 图片_如何读取delphi数据库中的图片
  3. 查询网站年龄和备案信息可以用站长工具查询吗?站长工具综合查询
  4. 无法解析的外部符号解决方法汇总
  5. 4核处理器_4核处理器就吃不了鸡?600元AMD锐龙3100华硕套装900元B350崩盘
  6. linux cgroup 死循环,Linux CGroup 基础
  7. 深入理解函数的参数——实际参数(实参)和形式参数(形参)
  8. Winget、Scoop 和 Chocolatey 安装位置更改方法
  9. Android Studio快速导入他人项目方法
  10. 火狐首页被360主页劫持的解决方案