当前位置

技术

技术

secure cookie

你还记得服务器端发送 Set-Cookie: 头部的时候可以包括哪些属性么?name=value、path、domain、Expire...这就是全部么?

不知道有多少人能记得这个 secure,并且能第一时间正确说出它的用途,hoho

基本上我们所有的 web 安全都是依靠 cookie 维系的,虽然多多少少会有一些方法来保证攻击者不能随便生成一个 cookie,但对于非加密的 HTTP 来说,监听到别人的 cookie 后然后伪造身份是非常容易的事情。

即使用户通过 https 提交用户名/口令,但 cookie 一旦在 http 通道上被传递给服务器,安全隐患就随之而来了。

Set-Cookie 的 secure 属性就是处理这方面的情况用的,它表示创建的 cookie 只能在 HTTPS 连接中被浏览器传递到服务器端进行会话验证,如果是 HTTP 连接则不会传递该信息,所以绝对不会被窃听到。凡是计划采用 HTTPS 来保证用户帐户安全的同志们都要注意对这个参数的使用,搞不好木桶上的最短板就在这里。

附:SOHU Passport 这个项目的 Web 技术和 cookie 关系很大,最近也着重研究了这方面的东西,下一篇 blog 仍然是和 cookie 相关的。

Topic: 

解压缩 Install Shield 打包的 .cab 文件

Install Shield 会把原始文件打包成 data1.cab, data2.cab 这样的文件名.. 恶心的是这东西虽然后缀叫 .cab,但不是微软的 cab 格式,用 7-Zip 等是无法解压的。

开源项目SynCE 推出了一个 UNIX 下的工具 unshield 来解压这种格式。在 Win32 平台上,目前似乎只有一个命令行工具 i6comp 来解压。

Topic: 

恢复 Ubuntu 6.06 的 grub 菜单

重装 Windows 后,grub 引导菜单会被覆盖掉。对于别的操作系统都好说,但 Ubuntu 6.06 的安装 CD 是没有 rescue 选项的,这个就让事情变得稍微有点恶心。

在我上周的分区表灾难恢复后,我就开始头疼怎么来恢复我的 grub。最后方法如下:

1. 从 Ubuntu CD 引导
2. 手工 Mount 原来的 / 分区
3. 执行 chroot,到那个目录
4. 执行 /sbin/grub-install /dev/hda
... 什么"无此设备". 这是因为 /dev 目录下的设备现在都是在启动过程中内核去自动加载
5. 打开另外一个窗口,ls -l /dev/hda 看看这个块设备的 major/minor 是多少,然后在 chroot 环境里用 mknod 去手工创建块设备
6. 最后 /sbin/grub-install /dev/hda 执行成功了!
7. 删除刚刚创建的设备文件,退出 chroot 环境,重启系统,一切都恢复了,阿门

Topic: 

介绍一个 GPL 的分区表修复工具 TestDisk

其实大约一年前,我就用过一次 TestDisk,当时是恢复了 FreeBSD 上的分区,感觉很牛,不过由于 Win32 下类似的软件相当多,所以这次我的分区出问题,一开始并没有考虑用它来做恢复。

事情的起因是这样的:
Thinkpad 上随机会附带一个隐藏分区,用来做系统恢复用。前不久我在安装 ubuntu 的时候,用自带的 gparted 分区工具把它喀嚓掉了,分成两个 primary 分区,一个 ext3,一个 swap,来安装我的 ubuntu。顺便把原来那个 30 多G 的 C 盘划了一个 extended 分区出来,然后在上面创建了 1个 FAT32 和 2 个 NTFS 分区。
上周一我决定重新安装 XP,但 grub 似乎无法认出新安装 XP 的引导记录,一怒之下用 FreeDOS 启动,"fdisk /mbr" 重写了主引导记录。麻烦来了,安装完 XP 后,我发现3个逻辑分区里丢了两个。
于是开始找分区表修复工具,"Partition Table Doctor"到是很容易的发现了我丢失的两个分区,于是执行 recover —— 那两个分区没有被恢复,反而硬盘最后的两个 linux 分区也没有了!!!

我几乎都要崩溃了,开始去搜索 Linux 分区的恢复工具,就这样又找到了 TestDisk。它不像 Win32 下常见恢复工具那样带有漂亮的图形界面以及向导模式,只是提供一个 DOS-提示符窗口,显示对磁道扫描的情况,以及所有可能的分区布局。扫描完成后选择那些正确的布局方案就好了。最终我找回了所有的分区。

鉴于 TestDisk 已经成功两次挽救回我的分区,所以我这里强烈推荐这个软件,作为分区表恢复的第一选择。

使用提示:缺省扫描中,TestDisk 可能并不是扫描所有的扇区,未必能找全潜在的正确分区布局,在完成普通扫描结果后,屏幕底部会有一个"[Search! ]"的选项,执行它就是扫描所有扇区。我的分区表就是这么恢复的。

事后我试图找出灾难的原因,以及为什么普通的恢复工具反而导致更大的灾难。感觉可能是 Windows 和 Ubuntu(或许包括 FreeDOS) 对硬盘磁道参数识别不一致导致的。Windows 认为硬盘是 240 Heads,但 Ubuntu 说只有 16 Heads。最后我是在 Ubuntu 下执行的 TestDisk 搞定的。

Topic: 

Win32 下的蓝牙——开发事项、外设购买

作为项目 MobileSync 的一部分,我计划增加对蓝牙通信的支持。结果经过一段时间的尝试,我发现 Win32 平台上针对蓝牙开发简直太让人郁闷了。

红外的支持看 MSDN 的文档下很容易就完成了,所以我也首先去参考 MSDN 上蓝牙相关的部分,结果在创建一个 BTH 的套接字的时候返回了 10047 错误——"Address family not supported by protocol family"。接下来从网上搜索得知这是因为我的机器上还没有安装本机协议栈(native bluetooth stack)的缘故。太奇怪了,我明明已经安装了驱动并可以传送文件啊,为什么说我不支持蓝牙?

再进一步查找,这才知道在 Windows XP SP1 之前,微软是不支持蓝牙的。直到 SP2,native stack 也仅仅支持少数的几种设备。可以想象蓝牙刚刚问世的时候,微软的反应是:“谁知道这项技术会不会最终成功,俺先等等看吧”。于是后来 IVTWidcomm先后开发了自己的协议栈和管理应用程序,来配合蓝牙外设在 Win32 平台上的使用。而我的蓝牙适配器的问题就是,它可以在 IVT 下工作,但 SP2 不支持(ISSC 芯片)。

对于蓝牙软件开发商来说,问题就很棘手。市场上有三种协议栈,最好是全都支持以适应最大可能的应用范围。我现在才明白为什么我的 Nokia 3650 的 PC 同步程序无法用蓝牙通信,这是因为它用的 mRouter 协议层只支持 Widcomm 和 Native,不支持设备附带的 IVT 驱动。

后来还找到 Jon Cellini 的一篇文章,描述如何让并没有被 MS 官方支持的设备在 native 协议栈下工作的。虽然有人报告他的 ISSC 设备可以如法炮制,但我的适配器却不能这样去工作。

为了能继续我的开发工作,我只好重新买了一个 CSR 芯片的适配器。很便宜,不过 50 元(加上快递费),芯片版本还是 BlueCore4-ROM,似乎能支持蓝牙 2.0。它很顺利就在 XP 下自动检测出来了,同时"Control Panel"里面多了一个"Bluetooth Devices"的控件。然后我就发现微软缺省的管理程序比 IVT 差太多了,很明显 Microsoft Native Stack 将是未来开发的主流,但要想得到用户的广泛应用,还差一套完善的设备管理程序。不知道未来是 Vista 去改进,还是独立的第三方厂商做开发。

故事讲完了,如果你计划购买蓝牙适配器,我建议还是选择一个 SP2 官方支持的,比如 CSR 就挺好。市场上的主流好像是 ISSC,它的确更便宜一些,但我不敢保证 SP3 或者 Vista 就一定会支持..

最后要说的是,从这个事例里面看到,微软对外设的支持也就那么回事情,Linux 的 BlueZ 栈好像在 2.4.x 时代就确定了主流地位,是不是未来对新型硬件的支持以后 Linux 的优势会越来越明显?

Topic: 

用免费的 Microsoft Visual C++ Toolkit 2003 编译 Python 2.4 模块

本来这个方法是从别人的 blog 那里看到的,我只是加了我的书签。但今天想查的时候发现这个 blog 访问不了,Tor 今天好像也用不了,寻觅半天,从 MSN Search Cache 里面找到了。贴在这里转载一下。

在这个方法之前,有人说需要 hack distutils 才能使用 Microsoft Visual C++ Toolkit 2003;但现在这个天才发现修改一下注册表就 OK 了,牛!

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\7.1\VC]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\7.1\VC\VC_OBJECTS_PLATFORM_INFO]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\7.1\VC\VC_OBJECTS_PLATFORM_INFO\Win32]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\7.1\VC\VC_OBJECTS_PLATFORM_INFO\Win32\Directories]
"Path Dirs"="C:\\Program Files\\Microsoft Visual C++ Toolkit 2003\\bin;
C:\\Program Files\\Microsoft Platform SDK for Windows Server 2003 R2\\bin"

"Library Dirs"="C:\\Program Files\\Microsoft Visual C++ Toolkit 2003\\lib;
C:\\Program Files\\Microsoft Platform SDK for Windows Server 2003 R2\\Lib;
C:\\Program Files\\Microsoft Visual Studio .NET 2003\\Vc7\\lib"

"Include Dirs"="C:\\Program Files\\Microsoft Visual C++ Toolkit 2003\\include;
C:\\Program Files\\Microsoft Platform SDK for Windows Server 2003 R2\\Include"

Python 2.5 也应该是用 VC 7.1 编译

Topic: 

DV-2-XviD 0.7 发布

DV-2-XviD 0.6 版本发布整整一个月后,0.7 版热辣出炉啦..

ChangeLog:
1. 增加了 comptest 步骤以更有效的控制最终文件大小。(请参考XviD 压缩后文件大小不符合预期结果的原因和解决方法,目前的方案是根据 comptest 结果修正最终分辨率大小)

2. 新开一个线程去执行压缩任务... 这样主窗口不会失去响应

3. 修改了好多以前不了解 Python 时写下的弱智代码.

4. 增加了英文版的 README,中文版的 README 也改成 UTF-8 编码。打包的路径稍稍有些改动。

5. 二进制文件里面去掉了 MSVCR71.dll,因为我没有购买 VC7,因此也没有重新分发该文件的权利。

Topic: 

最近在 Python 上的开发

周末经过艰苦的努力,终于可以在我的 R520 和本地的 sqlite 之间同步了!!

不过和西门子 cx65 同步还有问题.

这两天开始尝试别人送给我的 N3650,发现它对同步支持的很弱,好像只能作为 SyncML 客户端同步,但不能作为服务器让别人通过 obex 来同步。据说从 S60 2nd 开始(除了 6600)才能支持 SyncML。就是说除了 7650/3650/N-Gage/3600/6600/3660/3620/QD 的 S60 都支持。

计划在买新手机(目前看好 6630)前做好这么几件事情:

1. 支持 qyt 同志的西门子
R520 的 vcard 是 UTF-7 编码,西门子是 UTF-8 编码再 BASE64.. 另外感觉这个西门子的红外连接不稳定,要么就是我的红外适配器有问题,或者其它什么故障..

2. OBEX over Bluetooth ..
由于我 R520 上的蓝牙坏了,所以只能先拿这个 3650 测试了..另外昨天晚上发现 Python 的蓝牙支持似乎并不包括 win32 平台,至少 2.4.x 是这样

3. Thunderbird 扩展.
希望最后能和 TB 来同步地址本,我的终极目标,hehe

Topic: 
订阅 RSS - 技术