PHP上传带有单引号文件名的文件导致文件名被截断的bug [疑难杂症]

post by 朦朧中的罪惡 / 2010-6-7 10:00 Monday

新发现一个PHP的文件上传bug,bug描述如下:

触发条件:

PHP版本 < 5.3

PHP魔法引用开启

如果你上传一个叫做lalalala'gagaga.txt的文件,那么在服务器端接收到的时候,文件名就会从引号处被截断,名字变成gagaga.txt

$_FILES数组测试参数如下图:

点击查看原图

bug分析:

导致这个问题的原因是由于魔法引用功能转义单引号触发,

如果默认路径是c:\tmp\lalalala'gagaga.txt

那么经过魔法引用后就变成了c:\\tmp\\lalalala\'gagaga.txt

如果你使用basename函数打印这个字符串,就会得到'gagaga.txt

解决方案:

1.关闭你PHP的魔法引用功能

2.升级你的PHP到5.3版本,在5.3中这个问题已经修复

3.如果上面两个方案你都无法办到,那么下面是兼容方案

在你上传的表单里面增加一个隐藏域用于存储文件名称,选择文件后使用JavaScript取得文件名并将其存储在隐藏域中

例如:

<form name="imgform" method="post" action="upload.php" enctype="multipart/form-data">
   <input type="hidden" name="userfilename" id="userfilename">
   <input type="file" name="userfile" id="userfile" size="64" maxlength="256" onChange="javascript:top.document.imgform.userfilename.value= top.imgform.userfile.value">
</form>

然后在服务器端做相关处理

点击查看原图

这个问题在05年就有人发现了,不知道为啥PHP开发组一直没有修复这个bug

参考资料

标签: php 疑难杂症

使用Google SSL搜索的解决方案 [疑难杂症]

post by 朦朧中的罪惡 / 2010-6-2 22:09 Wednesday

Google前不久推出了SSL搜索,有了SSL咱就不怕某WALL了(现在用普通搜索撞上的几率非常高了)

但是切换到SSL搜索的步骤很麻烦:步骤如下

先访问:http://g.cn

再访问:http://www.google.com/ncr

再访问:https://www.google.com

现在找了一些比较好的快捷解决方案

1.使用短网址http://ggssl.com 直接访问Google SSL搜索主页,不需要繁琐的跳转操作,在此感谢大牛张宴 为咱们提供这个网址

2.安装Firefox Google SSL 搜索插件,在搜索框就能使用Google的SSL搜索

最后,当然是 FUCK GREATE FIRE WALL

标签: 疑难杂症

ubuntu10.04下eclipse运行速度慢问题解决 [疑难杂症]

post by 朦朧中的罪惡 / 2010-5-13 20:17 Thursday

在ubuntu下运行eclipse速度十分缓慢,感觉像是在用一台老爷机写程序,研究了一下Java环境才发现我装的是open jdk而不是sun jdk.

在ubuntu的官方找到了以下说明,链接

Sun Java moved to the Partner repository

For Ubuntu 10.04 LTS, the sun-java6 packages have been dropped from the Multiverse section of the Ubuntu archive. It is recommended that you use openjdk-6 instead.

If you can not switch from the proprietary Sun JDK/JRE to OpenJDK, you can install sun-java6 packages from the Canonical Partner Repository. You can configure your system to use this repository via command-line:

add-apt-repository "deb http://archive.canonical.com/  lucid partner"

晕倒,只好手动安装sun的jdk了

在命令行输入

$ sudo add-apt-repository "deb http://archive.canonical.com/  lucid partner"
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk

搞定

 

标签: linux Java ubuntu

ubuntu下PHP5.3安装xdebug后var_dump输出没有格式化的问题 [疑难杂症]

post by 朦朧中的罪惡 / 2010-5-6 10:49 Thursday

在ubuntu10.04下面配置Apache2.2 + PHP5.3的开发环境,顺便装了一个xdebug扩展方便调试代码。

但是环境配置好了之后却发现xdebug加载成功了但是var_dump输出的内容却没有使用html格式化

xdebug正常的var_dump输出应该是下面的样子

点击查看原图

但是我当前的情况却是没有格式化的代码

点击查看原图

这时想到估计是php.ini里面的某个输出的配置有问题,打印phpinfo()逐个查看配置,最后发现php配置项目

html_errors 为 Off

点击查看原图

将html_errors的值修改为On后,重启Apache,问题解决

标签: php ubuntu 疑难杂症

ubuntu安装MySQL-Python出现mysql_config not found报错解决 [疑难杂症]

post by 朦朧中的罪惡 / 2010-4-22 18:49 Thursday

配置MySQL-Python的时候系统报错,提示:

EnvironmentError: mysql_config not found

Google后得知mysql_config是属于MySQL开发用的文件,而使用apt-get安装的MySQL是没有这个文件的,于是在包安装器里面寻找

libmysqld-dev

libmysqlclient-dev

这两个包安装后问题即可解决

标签: 环境配置 linux python ubuntu 疑难杂症

ubuntu 9.10 firefox flash中文乱码解决 [疑难杂症]

post by 朦朧中的罪惡 / 2010-3-27 16:47 Saturday

Firefox安装flash播放器后默认的情况下flash播放器无法显示中文字体,表现情况为字体都变成了框框

解决方案:

sudo gedit /etc/fonts/conf.d/49-sansserif.conf

    <edit name="family" mode="append_last">
        <string>sans-serif</string>
    </edit>

修改为

    <edit name="family" mode="append_last">
        <string>sans</string>
    </edit>

保存后刷新页面,flash中文就显示正常了

 

标签: ubuntu

ubuntu在更新的时候报动态 MMap 没有空间了的问题解决 [疑难杂症]

post by 朦朧中的罪惡 / 2010-3-19 15:59 Friday

今天在apt-get update更新ubuntu源的时候报错了

E: 动态 MMap 没有空间了。请增大 APT::Cache-Limit 的大侠。当前值:12500000。(man 5 apt.conf)
E: 处理 zapping (NewVersion1)时出错
E: Problem with MergeList /var/lib/apt/lists/tw.archive.ubuntu.com_ubuntu_dists_karmic_universe_binary-i386_Packages
W: Unable to munmap
E: 无法解析或打开软件包列表文件或状态文件。
E: 动态 MMap 没有空间了。请增大 APT::Cache-Limit 的大侠。当前值:12500000。(man 5 apt.conf)
E: 处理 zapping (NewVersion1)时出错
E: Problem with MergeList /var/lib/apt/lists/tw.archive.ubuntu.com_ubuntu_dists_karmic_universe_binary-i386_Packages
W: Unable to munmap

解决方案:

编辑 sudo gedit /etc/apt/apt.conf
在里面增加或者修改以下参数,把后面的数字尽量的调大即可,如果调大后重复出现该问题,继续增加数字即可

APT::Cache-Limit 16777216;

标签: 环境配置 linux ubuntu

PHP使用Session和全局变量开启时候出现waring提示的分析 [疑难杂症]

post by 朦朧中的罪惡 / 2010-2-23 19:38 Tuesday

这个问题估计很少人会遇到,但是总有人会那么凑巧的给碰上

PHP在运行时出现一个Waring,内容为

Warning: Unknown: Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively. in Unknown on line 0.

如何触发这个Waring呢?首先php配置register_globals必须为Off

代码如下

<?php
session_start();
$test = 'be-evil' ;
$_SESSION['test'] = null;

在register_globals为On的情况下,$test可能是由其他全局变量转换来的例如$_GET,$_POST;

但是在register_globals为Off的情况下,这里是创建了一个全局变量 test 切值为 null,解释器会认为你忘记全局变量关闭了,然后想修改全局变量$test的值...然后就会冒出这个善意的提醒了


解决办法:

在PHP.ini中设定bug_compat_42或bug_compat_warn为Off即可

或者避免全局变量与Session变量名称同名

相关资料:

PHP Session的一个警告

PHP手册Session评论中一个网友提到的这个问题

 

 

 

标签: php

Google App Engine Launcher无法启动问题解决 [疑难杂症]

post by 朦朧中的罪惡 / 2010-1-10 20:23 Sunday

今天在电脑装好了Google App Engine,在启动Google App Engine Launcher的时候它提示以下内容

点击查看原图

Error occurred

See the logfile GoolgleAppEngineLauncher.exe.log for details

打开错误日志文件GoolgleAppEngineLauncher.exe.log

发现其内容为

Traceback (most recent call last):
  File "GoogleAppEngineLauncher.py", line 42, in <module>
  File "wx\_core.pyc", line 7913, in __init__
  File "wx\_core.pyc", line 7487, in _BootstrapApp
  File "launcher\app.pyc", line 53, in OnInit
  File "launcher\app.pyc", line 97, in _CreateModels
  File "launcher\maintable.pyc", line 35, in __init__
  File "launcher\maintable.pyc", line 86, in _LoadProjects
  File "launcher\project.pyc", line 63, in ProjectWithConfigParser
  File "launcher\project.pyc", line 260, in _LoadFromConfigParser
  File "ConfigParser.pyc", line 520, in get
ConfigParser.NoOptionError: No option 'name' in section: '0'

原来是配置文件内容出了问题,然后在C:\Documents and Settings\中搜索到google_appengine_projects.ini

打开该文件,内容为

[1]
path = D:\PYTHON\engineapp
name = engineapp
port = 8080

[0]

按照记录提示所说问题是 No option 'name' in section: '0'

删除[0]保存,再次启动Google App Engine Lancher 问题解决

标签: python GoogleAppEngine

关闭虚拟主机的Gzip [疑难杂症]

post by 朦朧中的罪惡 / 2009-10-14 13:41 Wednesday

有的Apache虚拟主机默认就开启的Gzip节省网站流量,但是这么做可能导致网站在使用ie6浏览时出现一些神奇的问题,如JavaScript不运行,框架页面空白等神奇的情况。

如果你的虚拟主机支持.htaccess,那么可以在其中写入SetEnv no-gzip即可关闭Apache的Gzip压缩。

标签: apache 原创

1 2 3 4