PHP 5.4 已废弃 magic_quotes_gpc,PHP安全转义函数详解(addslashes 、htmlspecialchars、htmlentities、mysql_real_escape_string、strip_tags)

1. addslashes()

addslashes()对SQL语句中的特殊字符进行转义操作,包括(‘), (“), (), (NUL)四个字符,此函数在DBMS没有自己的转义函数时候使用,但是如果DBMS有自己的转义函数,那么推荐使用原装函数,比如MySQL有mysql_real_escape_string()函数用来转义SQL。 注意在PHP5.3之前,magic_quotes_gpc是默认开启的,其主要是在$GET, $POST, $COOKIE上执行addslashes()操作,所以不需要在这些变量上重复调用addslashes(),否则会double escaping的。不过magic_quotes_gpc在PHP5.3就已经被废弃,从PHP5.4开始就已经被移除了,如果使用PHP最新版本可以不用担心这个问题。stripslashes()为addslashes()的unescape()函数。

2. htmlspecialchars()

htmlspecialchars()把HTML中的几个特殊字符转义成HTML Entity(格式:&xxxx;)形式,包括(&),(‘),(“),(<),(>)五个字符。

& (AND) => &amp;
” (双引号) => &quot; (当ENT_NOQUOTES没有设置的时候)
‘ (单引号) => ' (当ENT_QUOTES设置)
< (小于号) => &lt;
> (大于号) => &gt;

htmlspecialchars()可以用来过滤$GET,$POST,$COOKIE数据,预防XSS。注意htmlspecialchars()函数只是把认为有安全隐患的HTML字符进行转义,如果想要把HTML所有可以转义的字符都进行转义的话请使用htmlentities()。htmlspecialchars_decode()为htmlspecialchars()的decode函数。

3. htmlentities()

htmlentities()把HTML中可以转义的内容转义成HTML Entity。html_entity_decode()为htmlentities()的decode函数。

4. mysql_real_escape_string()

mysql_real_escape_string()会调用MySQL的库函数mysql_real_escape_string(),对(\x00), (\n), (\r), (), (‘), (\x1a)进行转义,即在前面添加反斜杠(),预防SQL注入。注意你不需要在读取数据库数据的时候调用stripslashes()来进行unescape,因为这些反斜杠是在数据库执行SQL的时候添加的,当把数据写入到数据库的时候反斜杠会被移除,所以写入到数据库的内容就是原始数据,并不会在前面多了反斜杠。

5. strip_tags()

strip_tags()会过滤掉NUL,HTML和PHP的标签。

6. 结语

PHP自带的安全函数并不能完全避免XSS,推荐使用HTML Purifier

时间: 2024-12-28 01:01:34

PHP 5.4 已废弃 magic_quotes_gpc,PHP安全转义函数详解(addslashes 、htmlspecialchars、htmlentities、mysql_real_escape_string、strip_tags)的相关文章

php中magic_quotes_gpc函数详解

magic_quotes_gpc函数在php中的作用是判断解析用户提示的数据,如包括有:post.get.cookie过来的数据增加转义字符"\",以确保这些数据不会引起程序,特别是数据库语句因为特殊字符引起的污染而出现致命的错误 在magic_quotes_gpc=On的情况下,如果输入的数据有 单引号(').双引号(").反斜线()与 NUL(NULL 字符)等字符都会被加上反斜线.这些转义是必须的,如果这个选项为off,那么我们就必须调用addslashes这个函数来为

已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10

1.int rand7()    2.{    3.  return rand()%7+1;    4.}    5.  6.int rand10()  7.{  8.    int x=0;  9.    do  10.    {  11.        x=(rand7()-1)*7+rand7();  12.    }  13.    while(x>40);  14.    return x%10+1;  15.} 分析:要保证rand10()在整数1-10的均匀分布,可以构造一个1-1

Android Notification setLatestEventInfo方法已废弃

代替setLatestEventInfo的方法是用Notification.Builder创建Builder对象,通过该对象设置Notification相关属性. otification.Builder builder = new Notification.Builder(this);builder.setContentText("Text");builder.setContentTitle("Title");builder.setSmallIcon(R.mipma

TF 2.0 Symbols Map:已废弃-&gt;新语法

https://docs.google.com/spreadsheets/d/1FLFJLzg7WNP6JHODX5q8BDgptKafq_slHpnHVbJIteQ/edit#gid=0 原文地址:https://www.cnblogs.com/pengwang52/p/12285006.html

magic_quotes_gpc和magic_quotes_runtime的区别和用法详解

当你的数据中有一些     "  ' 这样的字符要写入到数据库里面,又想不被过滤掉的时候,它就很有用,会在这些字符前自动加上,如 中国地大物博"哈哈" 中国\地大物博"哈哈" 可以使用set_maginc_quotes_runtime(0)关闭掉,当然你也可以直接在php.ini中设置. get_magic_quotes_runtime() 取得 PHP 环境变量 magic_quotes_runtime 的值. magic_quotes_gpc 为 on

《PHP程序设计》读书笔记

好久没有更新过我的博客了,主要前一阵子去了实习,现在实习进入尾声,终于有机会看看书了. 在前一阵子的实习中,用到最多就是PHP的CI框架和Jquery,所以现在再看一本有关PHP的书籍来深刻认识一下PHP吧.也推荐一下大家看这本书:http://book.douban.com/subject/2071057/ 话不多说,直接总结点有用的东西吧. Chapter2.语言基础 1.资源 许多模块提供了一些函数来处理外部事务.例如:每一个数据库扩展至少有一个函数来连接数据库,一个函数来向数据库发送查询

每天进步一点点——Linux系统中的时间处理

转载请说明出处:http://blog.csdn.net/cywosp/article/details/25839551 在程序中时间处理往往是一个麻烦的事,Linux系统提供了很多关于时间处理的函数,我们可以用这些函数来完成我们所需要的功能.那么在程序中一般会关心哪些时间问题呢? 真实时间:程序运行的时间,即程序启动到程序消亡所用时间或程序运行到现在所经过的时间 进程时间:一个进程所使用的CPU时间总量,适用于对程序.算法性能的检查或优化 本文只关注真实时间的处理与转换 一.Epoch 无论地

2017-2018-1 20155302 第十四周作业

2017-2018-1 20155302 第十四周作业 重新精学第十一章网络编程相关知识 第十一章网络编程因为之前在刘念老师的课上有所涉及有所讲解所以娄老师并没有着重讲这块知识,但我个人认为此章知识非常重要,是我们学习WEB编程和信息安全程序设计的基础,而且这章知识自问之前学习的并不好,并不牢靠,于是借着此次机会更加深入的学习重温一下网络编程方面的知识,好为今后的网络编程道路做好铺垫,学习一章内容两门课都能受益,何乐而不为呢? 首先回答几个问题,这些问题也是之前概念混淆所遗留下来的,此次重新学习

Notepad++中常用的插件【转】

转自:http://www.crifan.com/files/doc/docbook/rec_soft_npp/release/htmls/npp_common_plugins.html 1.4. Notepad++中常用的插件 1.4.1. 插件管理器: Plugin Manager 插件功能:此插件可以帮你管理插件,包括查看当前已经安装的插件有哪些,以及自动帮你下载相应的插件. 插件用途:主要用于管理(安装和卸载)插件 插件安装:在安装过程中,默认已选择安装此插件:图 2.2 “Notepa