大多的PHP程序,都有这样的逻辑:

如果发现php.ini配置为不给GPC变量自动添加转义斜线,则PHP自动为GPC添加转义斜线

但是事实上,这是错误的,因为它改变了GPC变量原来的值.

有这个遗留习惯的原因是PHP程序使用往往配合mysql, 而mysql对特殊字符的转义,采取的是添加转义斜线,但是其它数据如mssql,oci呢,不一定是这样的.

如果使用其它类型数据库,如mssql,oci,sybase 那么,给GPC添加转义斜线,更是个错误

进一步,如果GPC数据不需要存入数据库,而保存到文件系统,或转发给其它程序呢?更是很严重的错误逻辑.

所以,正确的做法是:
1.PHP程序入口去掉转义斜线(若php.ini配置为自动添加转义斜线)
2.在写入mysql时,使用mysql_real_escape_string而不是addcslashes来转义变量
因为前者比后者更为安全(字符集相关的)

db类中已考虑到这个问题,详情参阅db_mysql.class.php,搜寻mysql_real_escape_string

目前有以下案例:
积分商城的php.ini配置为自动添加转义斜线,用户提交的数据写入cookie时,需要及时去掉斜线
discuz 6.0的论坛,特殊用户名中的"頫"经过addcslashes处理后,竟然变成"頫/",后面多了一个斜线,这是discuz 6的一个bug.

那么,综述一下:
1.针对系统管理员,应该配置php.ini
magic_quotes_gpc=Off
magic_quotes_runtime=Off
magic_quotes_sybase=Off

针对php开发人员,更准确的逻辑:

1.检查php环境是否配置为自动添加转义斜线,若是,应该调用stripslashes去掉$_REQUEST, $_GET,$_POST,$_COOKIE的转义斜线

2.查询/写入/修改数据至mysql时,再使用mysql_real_escape_string转义之

最新文章

  1. 树莓派 基于Web的温度计
  2. 试验添加RAC(ORA10G)节点
  3. 害死人不偿命的(3n+1)猜想
  4. View的事件体系
  5. Windows 通用应用尝试开发 “51单片机汇编”第二次更新总结
  6. Java开发中的23种设计模式(转)
  7. myplan
  8. LightOJ 1138 Trailing Zeroes (III) 打表
  9. c# gzip解压缩
  10. android 缓存Bitmap - 开发文档翻译
  11. [Cycle.js] From toy DOM Driver to real DOM Driver
  12. git、githup使用
  13. metasploit nessus & db_autopwn
  14. Python和SQL 2017的强大功能
  15. gnome 3 美化
  16. Spring mvc 原理浅析
  17. 共创力咨询推出《静态代码分析(PCLint)高级实务培训》课程!
  18. android开发学习 ------- 关于getSupportFragmentManager()不可用的问题
  19. 随便说说sequelize的问题
  20. netty简单样例

热门文章

  1. C# SqlHelper
  2. YII框架路由和URL生成
  3. AndroidSdk下载地址和环境变量配置
  4. Win8节省C盘空间攻略
  5. 升级openssl到1.0.1g
  6. jquery插件:点击拉出的右侧滑动菜单
  7. 【C++学习之路】派生类的构造函数(一)
  8. 你好,C++(25)函数调用和它背后的故事5.1.2 函数调用机制
  9. SQL中删除同一字段中重复的值
  10. wm_char