• 2010-09-22

    以浏览器为核心的客户端软件的安全问题

    Views: 11571 | No Comments

    以浏览器为核心的客户端软件具有开发快速, 并且能使用浏览器的各种特性(如js脚本, flash插件等), 所以越来越多的客户端软件开始应用浏览器作为软件的界面渲染引擎.

    但是, 浏览器也是安全问题最多的软件之一. 因其应用广泛, 导致攻击方法层出不穷. 前段时间, QQ客户端的某个版本就遇到了这个问题. 这个版本的QQ使用IE作为聊天记录的界面引擎, 似乎由于疏忽的原因, 没有对聊天信息中的HTML标签进行过滤, 导致用户可以通过在聊天信息中包含JavaScript脚本, 从而在对方机器上执行.

    例如:

    <script type="text/javascript">alert('hahaha');</script>
    

    用户打开聊天历史记录时, 便会弹出一个窗口, 显示"hahaha". 还有嵌入iframe的:

    <iframe src="http://some" width="100%" height="400"></iframe>
    

    这样, 用户在打开聊天历史记录时, 却看到了一个网页, 而这个网页可能是挂马的.

    所以, 使用浏览器为核心的客户端软件, 必须重视安全问题, 要对发给浏览器渲染的所有字符进行过滤. 最好的方法是使用一种模板语言, 简单的如ubb, 而不是直接使用HTML.

    Posted by ideawu at 2010-09-22 11:19:39
  • 2010-09-09

    没见过比svn更难用的工具

    Views: 14156 | 3 Comments

    我的需求很简单, diff 某个版本和我当前的代码, 正常应该是

    svn diff url_xxx .(这样操作方式和diff命令一致)

    url_xxx 就是那个版本的路径, 点号"."就是当前目录, 没想到竟然不行! 太弱智的东西了! 真正的用法是:

    svn diff --new url_xxx --old .(这样不对, 因为顺序弄反了!)

    正确的是

    svn diff --old url_xxx --new .

    svn 从来就是这么弱智, 比如这一篇文章: 请提供Fuck-All选项

    Posted by ideawu at 2010-09-09 13:35:12
  • 2010-08-29

    Lighttpd mod_fastcgi源码分析

    Views: 27363 | No Comments

    最近在设计一种网络服务器架构, 最重要的一点是把耗时操作委托给工作进程(或者线程)来做, 所以考察一下 fastcgi. 大概看了下 lighttpd 的 mod_fastcgi 的源码, 没想到立即被卡住了. 根据我的想法, PHP 等 fastcgi 程序(php-cgi 进程)监听网络, 然后 mod_fastcgi 只需要 connect 这些进程即可, 奇怪的是, 我竟然看到了 listen! -

    fcgi_spawn_connection() 函数:
    
    fcgi_fd = socket(socket_type, SOCK_STREAM, 0);
    
    if (-1 == connect(fcgi_fd, fcgi_addr, servlen)) {
        close(fcgi_fd);
        fcgi_fd = socket(socket_type, SOCK_STREAM, 0);
        /* create socket */
        bind(fcgi_fd, fcgi_addr, servlen);
        listen(fcgi_fd, 1024);
    
        switch ((child = fork())) {
        case 0: {
            // child process
            if(fcgi_fd != FCGI_LISTENSOCK_FILENO) {
                close(FCGI_LISTENSOCK_FILENO);
                dup2(fcgi_fd, FCGI_LISTENSOCK_FILENO);
                close(fcgi_fd);
            }
            /* exec the cgi */
            execve(arg.ptr[0], arg.ptr, env.ptr);
            exit(errno);
        }
    }
    

    我很奇怪, mod_fastcgi 为什么要监听网络连接? 谁会连接它? 问了同事, 同事说可能是 fastcgi 进程要连接它, 可问题是 fastcgi 进程怎么知道连接什么地方, 更不用说, fastcgi 协议里没有提到要 fastcgi 进程主动连接 Web Server 一说.

    Continue reading »

    Posted by ideawu at 2010-08-29 18:00:51
  • 2010-08-22

    Master-Workers 模式处理高负载

    Views: 36166 | 7 Comments

    对于高负载的网络服务器, 瓶颈几乎总是在等待 IO, 而 CPU 的计算能力往往不是最先遇到的问题. 你的服务器程序, 接收客户端的请求, 可能还要连接另一台网络服务器, 一起合作处理客户端的请求. 很多情况下, 你无法把客户端的连接以及与另一台服务器的连接统一处理, 不可避免地要出现等待. 这时, 只能使用多进程或者多线程.

    Master-Workers(管理者-工作者)模式是处理这种情况的主要方式, 只要有 IO 等待或者其它耗时的操作, 都交互若干个工作者之一处理, 这样, 后续的请求不会被阻塞, 从而实现高负载.

    目录:

    下文中有时用"进程"一词同时指代进程和线程, 它们的区别主要考虑的是通信方式.
    Continue reading »

    Posted by ideawu at 2010-08-22 16:03:57
  • 2010-07-07

    TCP协议思想和技术的广泛应用

    Views: 38028 | 1 Comment

    TCP 协议是大量重要的网络和通讯的思想和技术的集合体. 这些思想和技术被应用在 TCP 身上, 另一方面, 学习 TCP 可以了解这些思想和技术. 通讯的思想和技术不仅仅可以应用狭义的数据通讯上, 也可以应用在广义的信息通讯上, 后者一般可以理解为应用层的交互协议, 例如即时通讯(IM)的聊天协议.

    首先, TCP 协议是一种可靠的传输协议. 这种可靠性可以从两方面理解: 1. TCP 保证数据的有序性和无差错; 2. TCP 尽最大努力确保数据被接收.

    有序和无差错可能比较好理解, 但"最大努力"则和我们一般理解的"可靠"有较大差别. 首先, TCP 尽最大努力传输数据, 一旦发送方无法保证数据传输到接收方, 它将通过断开连接(使连接失效)来声明这一点. 其次, TCP 可以明确地告诉一个数据分段已经被对方接收, 但无法准确的断定未被确认的数据没有被对方接收, 也就是说, 数据可能没有被对方接收, 也能已经被对方接收. 这种对传输失败的不确定性, 显然是对可靠性的一个重大打击. "两军队问题(Two Army Problem)"说明了这一点, 事实上, 我们无法判断一个确认(ACK)是丢失了还是没有发出.

    Continue reading »

    Posted by ideawu at 2010-07-07 12:16:47
  • 2010-07-06

    以浏览器引擎为核心的软件架构

    Views: 12771 | No Comments

    我在 2006 年的时候, 曾经提出过用 HTML/CSS 来做桌面应用程序的界面的想法, 但更早之前(2001年), 著名游戏开发者, 网易的游戏工程师云风便在其公司的"大话西游"网站游戏中应用了嵌入浏览器做界面的方法.

    Windows 控制面板里的"添加/删除应用程序"应该是较早的利用浏览器来做程序界面的一个程序, 当然, 微软肯定还有更早的程序. 后来的 Google Talk, 又是一个经典的利用浏览器做界面的一个软件.

    Continue reading »

    Posted by ideawu at 2010-07-06 10:34:22
|<<<5678910111213>>>| 9/13 Pages, 76 Results.