不知道爲什麽,我老是着迷于文件上傳這些東西上。之前日誌中寫過:IFRAME POST FILE(IFRAME 文件上传)、zf 1.11.0 Zend_File_Transfer_Adapter_Http判断文件大小存在问题、AJAX 文件上传、NGINX 上传文件、NGINX 上传进度条、PHP 文件上传进度条处理 uploadprogress。
回想起來這個問題可以很簡單也可以很複雜。簡單需求是上傳小文件并保存在某個地方、複雜的情況是上傳大文件帶進度條、再帶個續傳? 呵呵,如果除了續傳外,其實這些要求并不是很苛刻吧。
對於PHP 5.4(目前最新的是PHP 5.4.0 RC8)之前版本,你可以很容易的解決上傳文件的問題,但是進度條總是比較麻煩。因為你需要其他的擴展比如上面提供的 NGINX 的進度條、或者PECL插件。在PHP 5.4的 20 Jun 2011, PHP 5.4.0 Alpha 1 ,其本身終於加入了對進度條的支持,該功能是基於 SESSION 的。
– Improved Session extension:
. Added [...]
今天發現A網站(a.xxx.com) 以及B網站(b.xxx.com)共用 COOKIES 的域名 xxx.com 以及存儲路徑為 / 出現了問題。 A 網站、B 網站的 SESSION 各自為政。因為在配置2個網站的 SESSION 使用了相同的 MEMCACHED 服務,所以一直以來登陸 A網站成功後,B網站自然就能獲取相關的SESSION 信息了(這是最簡單的一種2個網站共享SESSION的方法,還有一種就是走接口。多數目前的網站都使用了OAUTH協議)。並且 SESSION ID 在切換各網站時也沒有變化。因為之前升級過PHP版本和一些擴展模塊,所以檢查了這種 SESSION 相關的參數,發現2個網站的參數全部一直。
最後突然想到最近服務器裝了 SUHOSIN,一查發現是 SUHOSIN 的 cryptdocroot 配置項的問題。
suhosin.session.cryptdocroot
Type: Boolean
Default: On
Flag that decides if the transparent session encryption key depends on the Documentroot field.
==========
suhosin.cookie.cryptdocroot
Type: Boolean
Default: On
Flag that decides if the transparent cookie encryption key depends on [...]
具体问题就不描述了,因为网络有太多关于这个的描述和转载了。
下面引用网络上解释碰撞原理的一段话:
当然这是理想情况下,因为任何哈希表的长度都是有限的,所以一定存在不同的数据项具有相同哈希值的情况,此时不同数据项被定为到同一个桶,称为碰撞(collision)。哈希表的实现需要解决碰撞问题,碰撞解决大体有两种思路,第一种是根据某种原则将被碰撞数据定为到其它桶,例如线性探测——如果数据在插入时发生了碰撞,则顺序查找这个桶后面的桶,将其放入第一个没有被使用的桶;第二种策略是每个桶不是一个只能容纳单个数据项的位置,而是一个可容纳多个数据的数据结构(例如链表或红黑树),所有碰撞的数据以某种数据结构的形式组织起来。
PHP是使用单链表存储碰撞的数据,因此实际上PHP哈希表的平均查找复杂度为O(L),其中L为桶链表的平均长度;而最坏复杂度为O(N),此时所有数据全部碰撞,哈希表退化成单链表。
今天刚看到这个问题,在我本机上跑了下下面的实例代码。结果就不贴出来,已经大于 100 了,很惭愧啊。因为这个是生成整形的 HASH 碰撞代码所以对网站本身还不构成威胁。我们都知道 $_post、$_request 过来的是字符串。于是就找了一个字符串的算法,去攻击内网的一台内部服务器。结果 PHP-CGI 直接崩溃,网站就挂了。
所以这里提醒下各位 SA 同学们,该升级下程序引擎拉。因为这次涉及的语言很广,这里就不列举了,直接 GOOGLE 查询 Supercolliding a PHP array 即可。
PHP 整形 KEY 碰撞代码 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php echo ‘<pre>’;
[...]
有时候做版本升级需要比对版本之前的差异并导出受影响的文件,做升级补丁或文件覆盖。以前都是在WINDOWS下打包处理,用 TortoiseSVN 很方便,先查看 LOG 然后比较导出即可。现在换到 MAC 下实在找不出更好的工具能承担这个任务。今天看到 Jason TortoiseSVN for Apple OSX 的日志,随手尝试了一把,成功了嘿嘿。这里分享下。
首先用 CROSSOVER(WINE) 装上 TortoiseSVN,和 WINDOWS 一样下一步即可。问题是装好后 WINDOWS 下右键即可看到 TortoiseSVN 的操作选项。CROSSOVER 却没有,而且类似 EXPLORER.EXE 的工具也很简陋。
还好的是 TortoiseSVN 提供了命令支持 TortoiseSVN Commands,执行 TortoiseProc.exe 并提供参数即可打开WINDOWS下一样的界面。
下面做个 checkout 的例子
在 Wine File 下选择 档案-》执行 输入以下命令:
1
C:\Program Files\TortoiseSVN\bin\TortoiseProc.exe /command:checkout /path:"/Users/Nroe/Desktop/zendcasts/zc14" /url:"http://zendcasts.googlecode.com/svn/trunk/zc14"
[...]
一般装了 XDEBUG 的人,打个 VAR_DUMP 或 throw Exception 都会显示被格式化后的样式。像这样:
在某些情况下,有些同学没开启 html_errors 这个选项就只会显示纯文本哦。
XDEBUG 除了美化这些输出效果外,还可以用来调试程序。profiler 和 execution_trace 都是不错的功能。
PS:XDEBUG 在打印多维数组或比较大的数组时会省略一部分内容。想要查看完整的,可以使用 VAR_EXPORT。
最近要亲自动手做一个异步的上传,据 GOOGLE 了解异步上传有2种实现,一种是 XHR;一种是利用 FORM target 指定 IFRAME 进行上传。因为我的服务端用的是 Zend_File,Zend_File 是通过 $_FILES 来处理上传文件的,所以 XHR 没办法进行处理。
IFRAME POST FILE
这边用一个样例来表述下:客户代理(浏览器)client.html 使用 IFRAME POST 一个文件到 server.phpserver.php 成功处理文件后返回一个 JSON 的数据
理想状态下 client.html 接受到 JSON 数据并判断如果正常完成上传的话就提示上传成功。
但注意的是当 server.php 发出一个 Content-type: application/json 后,问题就来了,我们在 client.html 中看到多了一个 pre 标签。这样就导致 client.html 会解析 server.php 返回的结果失败。
点击下载样例:Iframe-upload-file
以下情况会导致 client.html 接受到的结果多出 pre 标签
[...]
今天更新了 MMSEG4N,主要针对词典占用内存进行优化。
优化后,在相同词的情况下,MACOX 加载完词典后占用 147 MB 左右(之前为 240 MB 左右)、而 FREEBSD(系统版本是 7.2-RELEASE,虚拟机) 才 53 MB。相差很大啊。以后有空再继续研究下,词典占用内存还是太大了。
噢也,用 NODEJS 经过个把星期的研究已实现了 MSSEG4J 的 COMPLEX 算法。
该项目将命名为 MMSEG4N 意为 MMSEG 的 NODEJS,使用 NODEJS 提供基于 WEB SERVICE 的分词方案。整理算法实现基于 MMSEG4J,可以说是 JAVA 版的一个NODEJS 的实现。稍后实现 MAXWORD 算法再整理下代码就放出来。
java 中可以使用 java.lang.character 来对字符的一些处理。Character.getType 就是 unicode category 判定的一个实现。在同事的帮助下成功搭建了环境。
java 将 UnicodeData.txt 通过 GenerateCharacter 生成几张内部的表用于查找。可以在 openjdk 中找到相关的代码和所需的文件。
移植这个判断主要用于我的一个 NODEJS 分词项目。
我在之前写过2片广域密码强度的日志 密码强度检测 和 Password Strength Algorithm。
几个月前,我又看下了微软以及 TWITTER 的帐号密码检查策略。分别的地址是:https://www.microsoft.com/zh-cn/security/pc-security/password-checker.aspx 以及 https://twitter.com/signup。微软检查代码里有2个版本,旧版的通过查表标识实现,新版的使用了简单的判定。twitter 的有一个最垃圾密码名单的感觉不错。参考:519 项最烂密码
最后这2个策略都没有采用,采用了Firas Kassem 开发,Amin Rajaee 改进的一个算法。详细可以参考:http://phiras.wordpress.com/2007/04/08/password-strength-meter-a-jquery-plugin/
算法策略如下:
如果密码和帐号匹配,那么被禁止设置 如果密码长度小于 6 个字符,那么密码将被认定为太短而无法设置 密码长度每 4 位,加一分 密码中字符重复出现一次,扣一分 密码中字符重复出现二次,扣一分 密码中字符重复出现三次,扣一 密码中字符重复出现四次,扣一分 密码中只含有数字,扣十分 密码中只含有字母,扣十分 密码中含有三个数字,加五分 密码中含有二个特殊字符,加五分 密码中含有大写以及小写字母,加十分 密码中含有数字以及字母字符,加十五分 密码中含有数字以及特殊字符,加十五分 密码中含有字母以及特殊字符,加十五分 分数最高为一百分
實用技術博客,分享、討論實際工作中的一些問題和經驗
茉莉花~
有那麽一堆人,把道德和文化都丟棄了,還自稱5千年文明,可笑。
歡迎一起討論 OSX 下的程序開發、軟件應用等;WINDOWS 下的競技遊戲近期评论
- nroe 发表在《It’s Brain 后台管理UI》
- 桉叶 发表在《It’s Brain 后台管理UI》
- Paul 发表在《留言板》
- nroe 发表在《ZendStudio OSX 下啟用 JAVAHL》
- nroe 发表在《MAC 下使用 MACPORT 安裝 PHP-FPM》
标签
.SVN 80后 AJAX Android APACHE array aspersa AWE41AP BSD BUFFLAO character CHROME dns freebsd GOOGLE Javascript MAC MACPORT MAIL MMSEG4N MongoDB MySQL NAS NGINX NODEJS OSX OSX Password-Strength phing PHP Replica-SET REWRITE SESSION SHEEL SHELL TIMEMACHINE UPLOAD XDEBUG ZendFramework 中国特色 域名 存储过程 安全 搞笑 漫画日和链接表
- 01. Eric's linux and nginx 杨振亮一直从事linux 负载均衡,存储等工作
- 01. 叶茂盛 YeMaosheng’s Blog(软件开发、系统管理)
- 01. 威同学的博客 疯狂痴呆傻,美甘苦涩禅
- 01. 翡翠’s 板报 纪录自己的生活、工作和学习
- 01. 阿冬的 I-T 厨房的博客
- 01. 风雪之隅 PHP 的文章比较多,偶然看看[推荐下]
- 02. 新普IT教育(培训)
- 02. 若寒小记
- 10. Ayou 服务器系统架构分析日志 网易 Ayou,博客很简洁,内容精彩
- 10. Cats Who Code a website dedicated to those who create and maintain websites
- 10. David Walsh Blog MooTools Dev, JavaScript FanBoy, CSS Experimenter, and TPS Reporter
- 10. Web App Security
- 10. 大罗-PHP/Python博客
- 99. CodeColorer wordpress 代码加亮插件
- 99. stackoverflow.com 专业技术问答网站
文章归档
- 2012 年五月 (1)
- 2012 年三月 (1)
- 2012 年二月 (17)
- 2012 年一月 (6)
- 2011 年十二月 (9)
- 2011 年十一月 (7)
- 2011 年九月 (4)
- 2011 年八月 (11)
- 2011 年七月 (27)
- 2011 年六月 (20)
- 2011 年五月 (9)
- 2011 年四月 (10)
- 2011 年三月 (3)
- 2011 年二月 (3)
- 2011 年一月 (22)
- 2010 年十二月 (18)
- 2010 年十一月 (2)
- 2010 年十月 (6)
- 2010 年九月 (18)
- 2010 年八月 (6)
- 2010 年七月 (3)
- 2010 年六月 (2)
- 2010 年四月 (1)
- 2010 年三月 (7)
- 2010 年二月 (11)
- 2010 年一月 (8)
- 2009 年十二月 (4)
- 2009 年十一月 (4)
- 2009 年十月 (4)
- 2009 年八月 (5)
- 2009 年七月 (21)
