如果你网站空间的php.ini文件里的magic_quotes_gpc设成了off,那么PHP就不会在敏感字符前加上反斜杠(\\),由于表单提交的内容可能含有敏感字符,如单引号('),就导致了SQL injection的漏洞。在这种情况下,我们可以用addslashes()来解决问题,它会自动在敏感字符前添加反斜杠。
但是,上面的方法只适用于magic_quotes_gpc=Off的情况。作为一个开发者,你不知道每个用户的magic_quotes_gpc是On还是Off,如果把全部的数据都用上addslashes(),那不是“滥杀无辜”了?假如magic_quotes_gpc=On,并且又用了addslashes()函数,那让我们来看看:
php
//如果从表单提交一个变量$_POST['message'],内容为 Tom's book
//这此加入连接MySQL数据库的代码,自己写吧
//在$_POST['message']的敏感字符前加上反斜杠
$_POST['message'] = addslashes($_POST['message']);

//由于magic_quotes_gpc=On,所以又一次在敏感字符前加反斜杠
$sql = "Insert INTO msg_table VALUE('$_POST[message]');";

//发送请求,把内容保存到数据库内
$query = mysql_query($sql);

//如果你再从数据库内提取这个记录并输出,就会看到 Tom\\'s book
?>

这样的话,在magic_quotes_gpc=On的环境里,所有输入的单引号(')都会变成(\\')……
其实我们可以用get_magic_quotes_gpc()函数轻易地解决这个问题。当magic_quotes_gpc=On时,该函数返回TRUE;当magic_quotes_gpc=Off时,返回FALSE。至此,肯定已经有不少人意识到:问题已经解决。请看代码:
php
//如果magic_quotes_gpc=Off,那就为提单提交的$_POST['message']里的敏感字符加反斜杠
//magic_quotes_gpc=On的情况下,则不加
if (!get_magic_quotes_gpc()) {
$_POST['message'] = addslashes($_POST['message']);
} else {}
?>
其实说到这里,问题已经解决。下面再说一个小技巧。
有时表单提交的变量不止一个,可能有十几个,几十个。那么一次一次地复制/粘帖addslashes(),是否麻烦了一点?由于从表单或URL获取的数据都是以数组形式出现的,如$_POST、$_GET)那就自定义一个可以“横扫千军”的函数:
php
function quotes($content)
{
//如果magic_quotes_gpc=Off,那么就开始处理
if (!get_magic_quotes_gpc()) {
//判断$content是否为数组
if (is_array($content)) {
//如果$content是数组,那么就处理它的每一个单无
foreach ($content as $key=>$value) {
$content[$key] = addslashes($value);
}
} else {
//如果$content不是数组,那么就仅处理一次
addslashes($content);
}
} else {
//如果magic_quotes_gpc=On,那么就不处理
}
//返回$content
return $content;
}
?>

转载于:https://www.cnblogs.com/wayne173/p/3741779.html

php.ini中Magic_Quotes_Gpc开关设置相关推荐

  1. PHP开启magic扩展,php.ini中Magic_Quotes_Gpc开关设置

    Magic_Quotes_Gpc 解释 magic_quotes_gpc作用范围是:WEB客户服务端:作用时间:请求开始时. magic_quotes_runtime 作用范围:从文件中读取的数据或执 ...

  2. php request order,php.ini中的request_order推荐设置,requestorder_PHP教程

    php.ini中的request_order推荐设置,requestorder 今天刚刚安装dede,安装完成由一条错误信息(PHP 5.3 and above) Please set 'reques ...

  3. php.ini文件中的include_path设置

    一直对include_path的作用不了解,也没怎么注意过它的用途,今天在网上看一些资料后明白了,记录一下: 其实设置include_path的作用就是设置用include()函数包函文件时的路径,当 ...

  4. 为什么在数字开关电源中采样频率通常设置为开关频率?

    为什么在数字开关电源中采样频率通常设置为开关频率? 一. 基本概念 二. 采样频率通常设置为开关频率的几点考虑 一. 基本概念 奈奎斯特采样定律:在对模拟信号进行离散化时,采样频率至少应2倍于被分析的 ...

  5. php设置 uploadtmpdir_关于PHP上传文件时配置 php.ini 中的 upload_tmp_dir

    在<PHP 5.3 入门经典>9.6.3 的试一试中(P235),给出了一个上传文件的例子,这里的文件格式为jpeg图片(image/jpeg).如果之前未配置 php.ini 中的 up ...

  6. php.ini详细介绍与设置,配置

    ;;;;;;;;;;;;;;;;; ;; 关于php.ini ;; ;;;;;;;;;;;;;;;;; ; 这个文件必须命名为'php.ini'并放置在httpd.conf中PHPINIDir指令指定 ...

  7. php中magic_quotes_gpc对unserialize的影响

    昨天朋友让我帮他解决下他网站的购物车程序的问题,程序用的是PHPCMS,换空间前是好的(刚换的空间),具体问题是提示成功加入购物车后跳转到购物车页面,购物车里为空. 我看了下代码,大致的原理就是将产品 ...

  8. Eclipse中JVM内存设置

    为什么80%的码农都做不了架构师?>>>    eclipse.ini内存设置 -vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxP ...

  9. 全面认识Eclipse中JVM内存设置

        这里向大家描述一下Eclipse中如何进行JVM内存设置,JVM主要管理两种类型的内存:堆和非堆.简单来说堆就是Java代码可及的内存,是留给开发人员使用的:非堆就是JVM留给自己用的,所以方 ...

最新文章

  1. 【网络】高性能网络编程--下一个10年,是时候考虑C10M并发问题了
  2. html中的插入特殊符号的方法,在Word2016中插入特殊符号的方法
  3. freeImage图像旋转滤波
  4. centos查看系统/硬件信息及运维常用命令
  5. Webserver推送技术
  6. markdown使用markdown-viewer生成目录_谷歌浏览器查看m文件
  7. runtime之ivar内存布局篇
  8. 【滤波器】基于matlab GUI分数延迟滤波器设计【含Matlab源码 1347期】
  9. SQL必知必会 附录解读
  10. 哈佛引用格式(Harvard referencing system)
  11. grub4dos linux 设备,解决方案:在Grub4Dos硬盘上安装Fedora / CentOS Linux操作系统
  12. Android 自定义View:实现一个 FM 刻度尺
  13. 史上最简单的spark教程第二章-快速开发部署你的第一个Java+spark程序
  14. python日常实用小脚本-用Python编写渗透用小脚本 短小实用
  15. 6-3 sdust-Java-可实现多种排序的Book类 (20 分)
  16. shell脚本:sh、bash、dash的关系
  17. 计算机模拟飞行,模拟飞行 DCS F-14B Tomcat雄猫 中文指南 3.22计算机地址面板
  18. 数据分析入门——Matplotlib数据可视化
  19. SLAM十四讲-(3)三维空间刚体运动
  20. Linux网络虚拟化基石 network namespace

热门文章

  1. 7-16 求符合给定条件的整数集
  2. arduino 休眠 节能_优化arduino程序存储空间
  3. python中字典的键是唯一的吗_Python怎么通过字典的键和值做一个登录程序?
  4. Linux下如何手动搭建论坛?
  5. tgp饥荒 服务器无响应,饥荒TGP版常见运行问题有哪些_TGP版礼包领取及邀请添加好友方法详解_快吧单机游戏...
  6. JAVA费罗切测评_暴力美学的终极形态 JAVA Feroce 2评测
  7. amazon云计算平台_腾讯云首次公开边缘计算网络开源平台,拥抱5G与万物互联
  8. 灰度MANA信托增持729.04万MANA,FIL持仓增长185%
  9. Filecoin网络目前总质押量约为4110万枚FIL
  10. MakerDAO新增renBTC和UNI作为Dai抵押品