zoukankan      html  css  js  c++  java
  • PHP magic_quotes_gpc

    大多的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转义之

  • 相关阅读:
    EJB究竟是什么,真的那么神奇吗??
    使用GDAL图书馆RPC校正问题
    使用python写appium用例
    IOS_多线程_ASI_AFN_UIWebView
    android集成apk对一些问题经常遇到系统
    ajax j跨域请求sonp
    11gR2更换OCR和VOTE
    nyoj 47 江 河问题 【贪婪】
    JavaScript实现的购物车效果-效果好友列表
    Cocos2d-x学习笔记(五岁以下儿童) 精灵两种方式播放动画
  • 原文地址:https://www.cnblogs.com/chengJAVA/p/4331629.html
Copyright © 2011-2022 走看看