chengkun
2025-05-26 8f3df543230cd4403368b39b9bbe5726d11a0284
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
<?php
 
!defined('P_W') && exit('Forbidden');
/**
 * Basic Security Filter Service
 * @author liuhui@2010-6-30
 * @status building
 */
class S {
    /**
     * 整型数过滤
     * @param $param
     * @return int
     */
    function int($param) {
        return intval($param);
    }
    /**
     * 字符过滤
     * @param $param
     * @return string
     */
    function str($param) {
        return trim($param);
    }
    /**
     * 是否对象
     * @param $param
     * @return boolean
     */
    function isObj($param) {
        return is_object($param) ? true : false;
    }
    /**
     * 是否数组
     * @param $params
     * @return boolean
     */
    function isArray($params) {
        return (!is_array($params) || !count($params)) ? false : true;
    }
    /**
     * 变量是否在数组中存在
     * @param $param
     * @param $params
     * @return boolean
     */
    function inArray($param, $params) {
        return (!$param || !is_array($params) || !in_array($param, $params)) ? false : true;
    }
    /**
     * 是否是布尔型
     * @param $param
     * @return boolean
     */
    function isBool($param) {
        return is_bool($param) ? true : false;
    }
    /**
     * 是否是数字型
     * @param $param
     * @return boolean
     */
    function isNum($param) {
        return is_numeric($param) ? true : false;
    }
    /**
     * 加载类/函数文件
     * @param $file
     */
    function import($file) {
        if (!is_file($file)) return false;
        require_once $file;
    }
    /**
     * html转换输出
     * @param $param
     * @return string
     */
    function htmlEscape($param) {
        return trim(htmlspecialchars($param, ENT_QUOTES));
    }
    /**
     * 过滤标签
     * @param $param
     * @return string
     */
    function stripTags($param) {
        return trim(strip_tags($param));
    }
    /**
     * 初始化$_GET/$_POST全局变量
     * @param $keys
     * @param $method
     * @param $cvtype
     */
    function gp($keys, $method = null, $cvtype = 1) {
        !is_array($keys) && $keys = array($keys);
        foreach ($keys as $key) {
            if ($key == 'GLOBALS') continue;
            $GLOBALS[$key] = NULL;
            if ($method != 'P' && isset($_GET[$key])) {
                $GLOBALS[$key] = $_GET[$key];
            } elseif ($method != 'G' && isset($_POST[$key])) {
                $GLOBALS[$key] = $_POST[$key];
            }
            if (isset($GLOBALS[$key]) && !empty($cvtype) || $cvtype == 2) {
                $GLOBALS[$key] = S::escapeChar($GLOBALS[$key], $cvtype == 2, true);
            }
        }
    }
 
    /**
     * 指定key获取$_GET/$_POST变量
     * @param $key
     * @param $method
     */
    function getGP($key, $method = null) {
        if ($method == 'G' || $method != 'P' && isset($_GET[$key])) {return $_GET[$key];}
        return $_POST[$key];
    }
    /**
     * 全局变量过滤
     */
    function filter() {
        $allowed = array('GLOBALS' => 1,'_GET' => 1,'_POST' => 1,'_COOKIE' => 1,'_FILES' => 1,'_SERVER' => 1,
                        'P_S_T' => 1);
        foreach ($GLOBALS as $key => $value) {
            if (!isset($allowed[$key])) {
                $GLOBALS[$key] = null;
                unset($GLOBALS[$key]);
            }
        }
        if (!get_magic_quotes_gpc()) {
            S::slashes($_POST);
            S::slashes($_GET);
            S::slashes($_COOKIE);
        }
        S::slashes($_FILES);
        $GLOBALS['pwServer'] = S::getServer(array('HTTP_REFERER','HTTP_HOST','HTTP_X_FORWARDED_FOR','HTTP_USER_AGENT',
                                                    'HTTP_CLIENT_IP','HTTP_SCHEME','HTTPS','PHP_SELF',
                                                    'REQUEST_URI','REQUEST_METHOD','REMOTE_ADDR',
                                                    'QUERY_STRING'));
        !$GLOBALS['pwServer']['PHP_SELF'] && $GLOBALS['pwServer']['PHP_SELF'] = S::getServer('SCRIPT_NAME');
    }
 
    /**
     * 路径转换
     * @param $fileName
     * @param $ifCheck
     * @return string
     */
    function escapePath($fileName, $ifCheck = true) {
        if (!S::_escapePath($fileName, $ifCheck)) {
            exit('Forbidden');
        }
        return $fileName;
    }
    /**
     * 私用路径转换
     * @param $fileName
     * @param $ifCheck
     * @return boolean
     */
    function _escapePath($fileName, $ifCheck = true) {
        $tmpname = strtolower($fileName);
        $tmparray = array('://',"\0");
        $ifCheck && $tmparray[] = '..';
        if (str_replace($tmparray, '', $tmpname) != $tmpname) {
            return false;
        }
        return true;
    }
    /**
     * 目录转换
     * @param unknown_type $dir
     * @return string
     */
    function escapeDir($dir) {
        $dir = str_replace(array("'",'#','=','`','$','%','&',';'), '', $dir);
        return trim(preg_replace('/(\/){2,}|(\\\){1,}/', '/', $dir), '/');
    }
    /**
     * 通用多类型转换
     * @param $mixed
     * @param $isint
     * @param $istrim
     * @return mixture
     */
    function escapeChar($mixed, $isint = false, $istrim = false) {
        if (is_array($mixed)) {
            foreach ($mixed as $key => $value) {
                $mixed[$key] = S::escapeChar($value, $isint, $istrim);
            }
        } elseif ($isint) {
            $mixed = (int) $mixed;
        } elseif (!is_numeric($mixed) && ($istrim ? $mixed = trim($mixed) : $mixed) && $mixed) {
            $mixed = S::escapeStr($mixed);
        }
        return $mixed;
    }
    /**
     * 字符转换
     * @param $string
     * @return string
     */
    function escapeStr($string) {
        $string = str_replace(array("\0","%00","\r",'\0','%00','\r'), '', $string); //modified@2010-7-5
        $string = preg_replace(array('/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F]/','/&(?!(#[0-9]+|[a-z]+);)/is'), array('', '&amp;'), $string);
        $string = str_replace(array("%3C",'<'), '&lt;', $string);
        $string = str_replace(array("%3E",'>'), '&gt;', $string);
        $string = str_replace(array('"',"'","\t",'  '), array('&quot;','&#39;','    ','&nbsp;&nbsp;'), $string);
        return $string;
    }
    /**
     * 变量检查
     * @param $var
     */
    function checkVar(&$var) {
        if (is_array($var)) {
            foreach ($var as $key => $value) {
                S::checkVar($var[$key]);
            }
        } elseif (P_W != 'admincp') {
            $var = str_replace(array('..',')','<','='), array('&#46;&#46;','&#41;','&#60;','&#61;'), $var);
        } elseif (str_replace(array('<iframe','<meta','<script'), '', $var) != $var) {
            global $basename;
            $basename = 'javascript:history.go(-1);';
            adminmsg('word_error');
        }
    }
 
    /**
     * 变量转义
     * @param $array
     */
    function slashes(&$array) {
        if (is_array($array)) {
            foreach ($array as $key => $value) {
                if (is_array($value)) {
                    S::slashes($array[$key]);
                } else {
                    $array[$key] = addslashes($value);
                }
            }
        }
    }
 
    /**
     * 获取服务器变量
     * @param $keys
     * @return string
     */
    function getServer($keys) {
        $server = array();
        $array = (array) $keys;
        foreach ($array as $key) {
            $server[$key] = NULL;
            if (isset($_SERVER[$key])) {
                $server[$key] = str_replace(array('<','>','"',"'",'%3C','%3E','%22','%27','%3c','%3e'), '', $_SERVER[$key]);
            }
        }
        return is_array($keys) ? $server : $server[$keys];
    }
 
    /**
     * 通用多类型混合转义函数
     * @param $var
     * @param $strip
     * @param $isArray
     * @return mixture
     */
    function sqlEscape($var, $strip = true, $isArray = false) {
        if (is_array($var)) {
            if (!$isArray) return " '' ";
            foreach ($var as $key => $value) {
                $var[$key] = trim(S::sqlEscape($value, $strip));
            }
            return $var;
        } elseif (is_numeric($var)) {
            return " '" . $var . "' ";
        } else {
            return " '" . addslashes($strip ? stripslashes($var) : $var) . "' ";
        }
    }
    /**
     * 通过","字符连接数组转换的字符
     * @param $array
     * @param $strip
     * @return string
     */
    function sqlImplode($array, $strip = true) {
        return implode(',', S::sqlEscape($array, $strip, true));
    }
    /**
     * 组装单条 key=value 形式的SQL查询语句值 insert/update
     * @param $array
     * @param $strip
     * @return string
     */
    function sqlSingle($array, $strip = true) {
        if (!S::isArray($array)) return ''; // modified@2010-7-2
        $array = S::sqlEscape($array, $strip, true);
        $str = '';
        foreach ($array as $key => $val) {
            $str .= ($str ? ', ' : ' ') . $key . '=' . $val;
        }
        return $str;
    }
    /**
     * 组装多条 key=value 形式的SQL查询语句 insert
     * @param $array
     * @param $strip
     * @return string
     */
    function sqlMulti($array, $strip = true) {
        if (!S::isArray($array)) return ''; // modified@2010-7-2
        $str = '';
        foreach ($array as $val) {
            if (!empty($val) && S::isArray($val)) { //modified@2010-7-2
                $str .= ($str ? ', ' : ' ') . '(' . S::sqlImplode($val, $strip) . ') ';
            }
        }
        return $str;
    }
    /**
     * 组装SQL查询的限制条件
     * @param $start
     * @param $num
     * @return string
     */
    function sqlLimit($start, $num = false) {
        return ' LIMIT ' . ($start <= 0 ? 0 : (int) $start) . ($num ? ',' . abs($num) : '');
    }
}