Xss 处理

预防xss,页面中不同区域的字串应该使用不同的手段来处理,而不是一概的htmlspecialchars,简单+实用。

<?php
/**
 * Xss 处理
 *
 * 作者: 刘卫锋 (kevonliu@tencent.com)
 * 创建时间: 2013-07-04
 *
 * $Id: Xss.php 48518 2013-07-05 03:35:04Z kevonliu $
 */

class Xss {

    /**
     * 处理链接字串
     *
     * @param string $str
     * @return string
     */
    public static function link($str) {

        $pairs = array(
            '\'' => '%27',
            '"'  => '%22',
            '<'  => '%3C',
            '>'  => '%3E',
        );

        return strtr($str, $pairs);
    }

    /**
     * 处理js中的字串
     *
     * @param string $str
     * @return string
     */
    public static function js($str) {

        // See ECMA 262 section 7.8.4 for string literal format
        $pairs = array(
            // "\\" => "\\\\",
            // "\"" => "\\\"",
            // '\'' => '\\\'',
            '\"' => '\\x22',
            '\'' => '\\x39',
            '\\' => '\\x92',

            # To avoid closing the element or CDATA section
            '<' => '\\x3c',
            '>' => '\\x3e',

            # To avoid any complaints about bad entity refs
            '&' => '\\x26',

            # Work around https://bugzilla.mozilla.org/show_bug.cgi?id=274152
            # Encode certain Unicode formatting chars so affected
            # versions of Gecko don't misinterpret our strings;
            # this is a common problem with Farsi text.
            "\xe2\x80\x8c" => "\\u200c", // ZERO WIDTH NON-JOINER
            "\xe2\x80\x8d" => "\\u200d", // ZERO WIDTH JOINER
        );

        return strtr($str, $pairs);
    }

    /**
     * 处理html中的字串
     *
     * @param string $str
     * @return string
     */
    public static function html($str) {

        $pairs = array(
            '"'  => '&quot;',
            '\'' => '&#039;',
            '&'  => '&amp;',
            '>'  => '&gt;',
            '<'  => '&lt;',
        );
        return strtr($str, $pairs);
    }

}

?>

以上是php版本的代码,其他语言均类似。
欢迎指正,共同进步~~ 

25
Nov 2013
AUTHOR WiFeng
CATEGORY Web
COMMENTS No Comments

获取客户端IP用什么方式?

在这个灌水盛行的年代,我们必须要对那些心怀不轨,总是想着做点啥坏事的青年们,致以亲切的祝福:最近还好吗,是不是闲的蛋疼。

本博客使用Typecho 程序搭建,添加验证码插件后,垃圾评论还是有不少。隔个5-6天就有20多条,前几天修正了验证码插件当中的一个bug,稍微减缓了一点,不过还是有一些。这里就再对后台 “同一IP发布评论的时间间隔限制为N钟”这个功能动点手脚吧。首先要说明的是,这个功能并不能阻挡这些“灌水青年”的恶劣行为,这是因为基于Typecho程序,这个IP可以伪造,致使上面的设置起不到作用。但是这并不能认为是Typecho的bug,因为当你了解了它的用意之后就会明白。

阅读剩余部分...

10
Nov 2013
AUTHOR WiFeng
CATEGORY Web
COMMENTS No Comments

程序员如何面对需求变化

在工作中也接触过各种各样的项目,有的注重时间,有的注重质量,有的注重成本。有些项目会随着时间的推移侧重点会有所改变,比如刚开始可能注重质量、后来开始注重成本、最后可能注重时间,因此在这个变化中项目经理为了整体把控好这个项目,一些需求的变动也是再所难免。即使没有上面说的这些情况,一个项目从开始到结尾,需求的变化肯定是会有的。对于互联网行业,一个新产品的出现往往会立为一个项目,这里主要也是针对这样项目来进行描述。产品需求需求变化意味着什么,意味着程序要要不停的修改之前编写的代码,同时也就意味着不能按时下班。那么程序员怎么才能够更好的应对产品的这些快速的需求变化呢?于是乎,业界的高人提到了敏捷、迭代,但是真正能运用好,还是要经过千锤百炼。

阅读剩余部分...

3
Nov 2013
AUTHOR WiFeng
CATEGORY C/C++,Web
COMMENTS No Comments

C++五种内存分配方法的区别

在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 
栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。
堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。 
自由存储区,就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。 
全局/静态存储区,全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C++里面没有这个区分了,他们共同占用同一块内存区。 
常量存储区,这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改(当然,你要通过非正当手段也可以修改,而且方法很多,在《const的思考》一文中,我给出了6种方法) 

阅读剩余部分...

3
Nov 2013
AUTHOR WiFeng
CATEGORY C/C++
COMMENTS No Comments

如何编写高性能的应用程序

在这个硬件性能日新月异的年代里,我们充分的享受着硬件带给我们的“免费午餐”,似忽软件的效率问题已经不再是一种被开发者关心的问题,但是,随着CPU的主频提高步伐越来越慢,高速缓存也不是可以无限制增加,新技术的使用逐渐被用来提高硬件的性能,这时候,要充分发挥这些新特性,软件的支持就显得很重要了,于是,程序的运行效率再一次映入我们的视野,新时代的软件优化,我们该何去何从? 

阅读剩余部分...

3
Nov 2013
AUTHOR WiFeng
CATEGORY Jotting
COMMENTS No Comments

从美学角度来看待编写的代码

似漫漫征途,半个世纪,代码发展至今已有大从如同象形文字般的纸孔设计到01机器指令序列、到能进行简单翻译的汇编伪指令集..到后来的结构化程序语言和如今的面向对象语言设计、脚本语言以及更多将来未知的代码语言,可谓层出不穷。在如同物种优胜劣汰般的法则下,代码也随着我们思想力、行动力的不断前进、不断进化。代码对我犹如一座雕像般具有着力与美。 

阅读剩余部分...

3
Nov 2013
AUTHOR WiFeng
CATEGORY Jotting
COMMENTS No Comments