PHP Xss 处理

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

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<?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(
            '"'  => '"',
            '\'' => ''',
            '&'  => '&',
            '>'  => '>',
            '<'  => '<',
        );
        return strtr($str, $pairs);
    }
 
}
 
?>

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

http://521-wf.com/archives/221.html

posted @   笠航  阅读(212)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示