• 2012-08-26

    几种极其隐蔽的XSS注入的防护

    Views: 19485 | 5 Comments

    XSS注入的本质就是: 网页中根据用户的输入, 不期待地生成了可执行的js代码, 并且js得到了浏览器的执行. 意思是说, 服务器响应给浏览器的字符串中, 包含了一段非法的js代码, 而这段代码跟用户的输入有关.

    常见的XSS注入防护, 可以通过简单的 htmlspecialchars(转义HTML特殊字符), strip_tags(清除HTML标签) 来解决, 但是, 还有一些隐蔽的XSS注入不能通过这两个方法来解决, 而且, 有时业务需要不允许清除HTML标签和特殊字符. 下面列举几种隐蔽的XSS注入方法:

    IE6/7 UTF7 XSS 漏洞攻击

    隐蔽指数: 5
    伤害指数: 4

    这个漏洞非常隐蔽, 因为它让出现漏洞的网页看起来只有英文字母(ASCII字符), 并没有非法字符, htmlspecialchars 和 strip_tags 函数对这种攻击没有作用. 不过, 这个攻击只对 IE6/IE7 起作用, 从 IE8 起微软已经修复了. 你可以把下面这段代码保存到一个文本文件中(前面不要有空格和换行), 然后用 IE6 打开试试(没有恶意代码, 只是一个演示):

    +/v8 +ADw-script+AD4-alert(document.location)+ADw-/script+AD4-
    

    最容易中招的就是 JSONP 的应用了, 解决方法是把非字母和数字下划线的字符全部过滤掉. 还有一种方法是在网页开始输出空格或者换行, 这样, UTF7-XSS 就不能起作用了.

    因为只对非常老版本的 IE6/IE7 造成伤害, 对 Firefox/Chrome 没有伤害, 所以伤害指数只能给 4 颗星.

    参考资料: UTF7-XSS

    JSONP函数名注入

    隐蔽指数: 5
    伤害指数: 5

    Continue reading »

    Posted by ideawu at 2012-08-26 17:37:46
  • 2012-07-29

    动态语言应该有多动态?

    Views: 25737 | 12 Comments

    一加一等于几, 这是个问题

    某些所谓的动态语言是名不副实的 - 我称之为伪动态语言. 这些伪动态语言之所以是伪的, 是因为它们只是在代码层面的变量是动态的, 而它们的类型系统并不是真正动态的, 一个简单的例子, 考虑字符串能否直接和整数进行拼接成为一个新的字符串.

    当然, 语言维护者用另一个名词"类型强度(type strength)"来表示这种行为, 然后把这种本质上不动态的行为称为"强类型(strong typing)", 把真正的动态称为"弱类型(weak typing)".

    但我认为, "动态语言"的概念应该重新定义, "动态"应该脱离字面的意义, 去探究真正本质的动态.

    Continue reading »

    Posted by ideawu at 2012-07-29 01:00:33
  • 2012-05-29

    PHP求天数常犯的错误

    Views: 17424 | No Comments

    按N天分隔时间, 求出每一个时间段的开始和结束. 例如按7天分隔里头, 求当前时间所处的区间的开始和结束. 要注意时区!

    注意, 不要简单地对时间戳取模, 而是要对时间戳与开始时间(1970-01-01)的距离进行取模.

    <?
    $step = 7;
    $zerotime = strtotime('1970-01-01'); // 不一定是0!
    
    $span = ($time - $zerotime) % ($step * 86400);
    $stime = $time - $span;
    $etime = $stime + ($step * 86400) - 1;
    
    $sdate = date("Y-m-d H:i:s", $stime);
    $edate = date("Y-m-d H:i:s", $etime);
    ?>
    

    注意: Asia/Chongqing 时区, php 5.2.14

    strtotime('1980-5-1 01:00:00') - strtotime('1980-5-1 00:00:00'); // 输出 0!
    
    Posted by ideawu at 2012-05-29 16:03:05
  • 2012-04-12

    Nginx + PHP 配置和启动脚本

    Views: 21907 | No Comments

    做个笔记.

    # nginx.conf
    
    server {
        listen 8080 ;
        server_name localhost;
    
        location / {
            root           /home/work/htdocs;
            expires 1d;
            autoindex on;
            index  index.php index.html;
        }
        location ~* \.php$ {
            root           /home/work/htdocs;
            fastcgi_pass   127.0.0.1:30000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /home/work/htdocs/$fastcgi_script_name;
            client_max_body_size       100m;
            include        fastcgi_params;
            fastcgi_connect_timeout 1000s;
            fastcgi_send_timeout 1000s;
            fastcgi_read_timeout 1000s;
        }
    }
    
    # nginx.sh ngix 启动脚本
    
    #!/bin/sh
    case "$1" in 
        'start')
            sudo /usr/local/nginx/sbin/nginx -s start
            ;;      
        'stop') 
            sudo /usr/local/nginx/sbin/nginx -s stop
            ;;      
        'restart')
            sudo /usr/local/nginx/sbin/nginx -s reload
            ;;      
        *)
            echo "Usage: $0 {start|stop}"
            exit 1  
        ;;      
    esac
    
    # spaw-php.sh php-cgi 启动脚本
    #!/bin/sh
    dir=`dirname $0`
    PID_FILE=/home/work/htdocs/spaw-php.pid
    PHP_FCGI="/home/work/php/bin/php-cgi -f /home/work/htdocs/php.ini"
    
    case "$1" in 
        'start')
            spawn-fcgi -C 3 -p 30000 -f "$PHP_FCGI" -P $PID_FILE
            ;;      
        'stop') 
            kill `cat $PID_FILE`
            ;;      
        'restart')
            kill `cat $PID_FILE`
            spawn-fcgi -C 3 -p 30000 -f "$PHP_FCGI" -P $PID_FILE
            ;;      
        *)
            echo "Usage: $0 {start|stop}"
            exit 1  
        ;;      
    esac
    
    Posted by ideawu at 2012-04-12 15:52:17
  • 2012-04-06

    Facebook 网站架构

    Views: 35485 | No Comments

    我收集到一些文章和视频, 可以带你窥探 Facebook 的架构. Facebook 承载了几十亿的用户, 它的架构(包括思想和实现)是非常值得参考的. 当然, 你要小心不要照搬 Facebook 的每一字一句, 因为任何思想和实现都是有自己的应用场景的.

    Posted by ideawu at 2012-04-06 13:17:22 Tags:
  • 2012-03-23

    Redis被bgsave和bgrewriteaof阻塞的解决方法

    Views: 63769 | No Comments

    Redis 是一个性能非常高效的内存 Key-Value 存储服务, 同时它还具有两个非常重要的特性: 1. 持久化; 2. Value 数据结构. 这两个特性让它在不少场景轻松击败了 Memcached 和 Casandra 等.

    Redis 的持久化在两种方式: Snapshotting(快照) 和 Append-only file(aof). 在一个采用了 aof 模式的 Redis 服务器上, 当执行 bgrewriteaof 对 aof 进行归并优化时, 出现了 Redis 被阻塞的问题, 此时, Redis 无法提供任何读取和写入操作.

    按字面理解, bgrewriteaof 是在后台进行操作, 不应该影响 Redis 的正常服务. 原理也确实是这样的, Redis 首先 fork 一个子进程, 并在该子进程里进行归并和写持久化存储设备(如硬盘)的. 按照正常逻辑, 在一台多核的机器上, 即使子进程占满 CPU 和硬盘, 也不应该导致 Redis 服务阻塞啊!

    其实, 问题就出在硬盘上.

    Continue reading »

    Posted by ideawu at 2012-03-23 13:50:34 Tags: , , , , , , ,
|<<<34567891011>>>| 7/28 Pages, 163 Results.