一、前言

博主在接受新代码的时候,发现代码中频繁使用addslashes 这个函数,说实话,博主在之前还真没怎么用过这个函数,所以这里总结一下它的大致用法。这类安全性的函数某种意义上也代表了咱们的水平吧,能考虑到这点,并且会用就可以。

二、函数的解释

1、概念

概念请参考该博客:https://www.cnblogs.com/yingww/p/4290849.html

2、引申

========================= 旧的博客 ==============================================

对PHP程序来说,还有个魔术引号的概念(自php5.40之后被移除),这个属于php.ini的配置,意义是:

当 magic_quotes_gpc 打开时,所有的 ‘ (单引号), ” (双引号), (反斜线) and 空字符会自动转为含有反斜线的溢出字符。

magic_quotes_gpc设置是否自动为GPC(get,post,cookie)传来的数据中的’”加上反斜线。可以用get_magic_quotes_gpc()检测系统设置。它的功能就是给数据库查询语句等的需要在某些字符前加上了反斜线。

链接:https://www.jb51.net/article/104699.htm

=============================== 2019年3月11日补充 ==================================
关于魔术引号:

PHP 5.4.0 起移除魔术引号,由于魔术引号的存在,会影响我们程序的可移植性,对于有些在该配置开启下的代码,当移植到该配置没有开启的服务器环境下的话,就会引发很多问题。由于并不是每一段被转义的数据都要插入数据库的,如果所有进入 PHP 的数据都被转义的话,那么会对程序的执行效率产生一定的影响。

目前来说,使用addslashes()函数更加的灵活一些,对于程序的性能来说也比开启魔术引号要好很多。

这部分多谢热心网友的提醒,我自己写的时候,也不够认真,后面又查询了一些资料,才发现这个魔术引号的概念早就取消了。。好吧,这里再次拜谢shanksred同学的提醒,一起进步!

三、一般在哪里用

        (1)输出数据的时候  (结合使用,输出的时候用htmlspecialchars()函数输出,可以转换html代码为实体,尽量安全一些)(2)查出数据,要继续使用并存储的时候 (存储一些带特殊字符的字符串时)(3)接收用户传过来的参数的时候  (这部分是防止用户输入特殊字符或者html代码等。最好是前端做好正则匹配,从开始就限制好)(4)https://zhidao.baidu.com/question/446575573.html (存数据库,不转义就存不进去)(5)就是防止sql注入(防止用户输出的sql语句直接操作数据库)

四、需要注意的地方

            (1)现在使用addslashes 函数已经不能完全防止sql注入了。   http://www.php.cn/php-weizijiaocheng-362949.html   (2)在使用之前,先确定php配置文件那个是否是关着的。防止双层转义。  http://blog.51cto.com/5iwww/516981  (3)mysql_real_escape_string 这个函数也是php提供的专门用户防止数据库攻击的过滤函数,比addslashes 更加严格一些。:文档地址:http://www.w3school.com.cn/php/func_mysql_real_escape_string.asp(4)目前来讲,addslashes 是可以被黑客绕过去的,所以在防止sql注入方面的效果不尽人意,建议尽量使用PDO的prepare方式

这部分后面都带的有链接,大家可以看一看,了解下这个函数的一些特点以及目前的不足。

五、关于pdo预防sql注入

1、关于pdo防止sql注入的原理

这部分有一篇博客写的很好,这里推荐给大家:https://my.oschina.net/zxu/blog/148432

2、我们目前使用的主流框架是否自带了过滤

目前我们主流使用的框架,包括laravel,Yii,TP等,这些框架是否都自带了过滤方法呢?比如我们在接收参数或者输出参数的时候,是否框架已经帮我们做好了转义?还是说我们必须自己再多加一层转义呢?

(1)关于TP框架

TP框架使用htmlspecialchars函数默认过滤,比如TP的"I"函数
参考:https://blog.csdn.net/china1223/article/details/51953668
(2)关于Yii框架和laravel框架

YII框架确实在输入中没有过滤,但是在输出中过滤了,用Html::encode()和HtmlPurifier::process方法,同样的类似laravel等框架也都是在输出时过滤,而不是在输入时过滤(在模板{}中过滤),目前主流的方法都是在输出时过滤,因为输入时就是普通的文本,存入数据库时没有任何影响,而输出时才能展示破坏的威力。TP框架在输入时采用了htmlspecialchars过滤函数。 框架比较好的地方在于在操作数据库使用的PDO的prepare方式,更加的安全

也就是说,目前用主流的框架,比如laravel或者yii等,基本在操作数据库那一步是安全的(已经对PDO进行了封装)。在正式操作数据库之前,我们也可以自己对数据进行过滤,争取达到 安全的目的。如果是逻辑非常复杂,必须要用原生的sql的话,那么请在过滤字符和转义上面多下点功夫吧。

end

PHP的addslashes 函数详解相关推荐

  1. addslashes是用PHP,php addslashes用法详解

    php addslashes用法详解2021-03-17 02:57:22 php addslashes的用法是:首先创建一个PHP示例文件:然后通过"addslashes('Shangha ...

  2. C语言网络编程:accept函数详解

    文章目录 前言 函数描述 代码实例 如何得到客户端的IP 和 端口号 前言 当使用tcp服务器使用socket创建通信文件描述符,bind绑定了文件描述符,服务器ip和端口号,listen将服务器端的 ...

  3. 【FFmpeg】函数详解(三)

    FFmpeg函数详解 14.av_write_frame 15.av_interleaved_write_frame 16.av_write_trailer 17.avio_close 18.av_i ...

  4. 【FFmpeg】函数详解(二)

    FFmpeg函数详解 9.av_dump_format 10.avio_open 11.avformat_write_header 12.avcodec_send_frame 13.avcodec_r ...

  5. 【FFmpeg】函数详解(一)

    FFmpeg函数详解 一.错误码相关 1.AVERROR 2.av_strerror 3.其他错误码解释 二.编解码 1.获取编解码器 2.申请.释放上下文环境 3.打开编码器avcodec_open ...

  6. 【ES6】Generator函数详解

    [ES6]Generator函数详解 一.Generator函数简介 基本概念 函数写法 yield关键字介绍 二.next方法的参数 三.for...of循环 四.关于普通throw()与Gener ...

  7. mysql的聚合函数综合案例_MySQL常用聚合函数详解

    一.AVG AVG(col) 返回指定列的平均值 二.COUNT COUNT(col) 返回指定列中非NULL值的个数 三.MIN/MAX MIN(col):返回指定列的最小值 MAX(col):返回 ...

  8. python平方数迭代器_对python中的高效迭代器函数详解

    python中内置的库中有个itertools,可以满足我们在编程中绝大多数需要迭代的场合,当然也可以自己造轮子,但是有现成的好用的轮子不妨也学习一下,看哪个用的顺手~ 首先还是要先import一下: ...

  9. python基础知识~ 函数详解2

    python~函数详解2  1 生成器函数    定义 如果函数有yield这个关键字,就是生成器函数.生成器函数() 获取的是生成器,不执行函数   须知 yield和return一样,都可以返回数 ...

最新文章

  1. Swift和Javascript的神奇魔法
  2. 交易劫持、钓鱼网站、盗号***严重威胁网购安全
  3. 2.本征矩阵 基本矩阵以及对极几何之间的约束关系
  4. Form表单基础知识和常用兼容方法笔记(二)
  5. docker命令及挂载
  6. 《Python Cookbook 3rd》笔记(5.16):增加或改变已打开文件的编码
  7. const参数,const返回值与const函数
  8. django 1.8 官方文档翻译: 2-4-3 模式编辑器
  9. centos python_【建议收藏】Python虚拟环境最全教程,看这篇就够了!
  10. oracle windows 优化工具,使用Windows工具管理Nt上的Oracle数据库
  11. 通过XMPP协议实现推送信息
  12. struts2学习笔记(一):配置struts2开发环境
  13. Java 又双叒叕发布新版本,这么多版本如何灵活管理?
  14. CAD转换PDF格式,文字模糊不显示
  15. 扫码枪收银有手续费吗_为何超市“扫码枪”不输密码就可以付款?听收银员说完,不纠结了...
  16. 两台电脑如何直接用一根网线传数据?
  17. 201871010126 王亚涛 《面向对象程序设计(java)》 第四周学习总结
  18. 转载(工信部):张欣 辽宁奇辉电子系统工程有限公司
  19. qt控件之qt中的控件QTableWidget的使用
  20. svg学习之svg动画

热门文章

  1. YOLOv5训练量化压缩
  2. python 多进程 字典,数组
  3. python判断对象是否有属性
  4. Tensorflow: 保存和复原模型(save and restore)
  5. 运动目标检测、阴影检测及目标跟踪中用得到的标准测试视频下载
  6. openTLD算法在opencv3的PatchGenerator
  7. OSPF特殊区域之STUB
  8. 21. 将报警信息实时发送至邮箱
  9. python写用用户名密码程序_Python创建用户名和密码程序
  10. java reflection list_Java Reflection(九):泛型