• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP magic_quotes_gpc的正确处理方式

php 搞代码 4年前 (2022-01-25) 15次浏览 已收录 0个评论

大多的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的论坛,特殊用户名中的"頫"经过ad+本文来源gao@daima#com搞(%代@#码网

搞代gaodaima码

dcslashes处理后,竟然变成"頫\",后面多了一个斜线,这是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转义之。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP magic_quotes_gpc的正确处理方式

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址