request.class.php
6.36 KB
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
<?php
/**
* 处理外部请求变量的类
*
* 禁止此文件以外的文件出现 $_POST、$_GET、$_FILES变量及eval函数(用request::myeval )
* 以便于对主要黑客攻击进行防范
*
* @version $Id: request.class.php 1 12:03 2010-10-28 tianya $
* @package DedeCMS.Libraries
* @copyright Copyright (c) 2007 - 2010, DesDev, Inc.
* @license http://help.dedecms.com/usersguide/license.html
* @link http://www.dedecms.com
*/
// REQUEST常量,用于判断是否启用REQUEST类
define('DEDEREQUEST', TRUE);
//简化 cls_request::item() 函数
function Request($key, $df='')
{
$GLOBALS['request'] = isset($GLOBALS['request'])? $GLOBALS['request'] : new Request;
if (!$GLOBALS['request']->isinit)
{
$GLOBALS['request']->Init();
}
return $GLOBALS['request']->Item($key, $df);
}
class Request
{
var $isinit = false;
//用户的cookie
var $cookies = array();
//把GET、POST的变量合并一块,相当于 _REQUEST
var $forms = array();
//_GET 变量
var $gets = array();
//_POST 变量
var $posts = array();
//用户的请求模式 GET 或 POST
var $request_type = 'GET';
//文件变量
var $files = array();
//严禁保存的文件名
var $filter_filename = '/\.(php|pl|sh|js)$/i';
/**
* 初始化用户请求
* 对于 post、get 的数据,会转到 selfforms 数组, 并删除原来数组
* 对于 cookie 的数据,会转到 cookies 数组,但不删除原来数组
*/
function Init()
{
global $_POST,$_GET;
//处理post、get
$formarr = array('p' => $_POST, 'g' => $_GET);
foreach($formarr as $_k => $_r)
{
if( count($_r) > 0 )
{
foreach($_r as $k=>$v)
{
if( preg_match('/^cfg_(.*?)/i', $k) )
{
continue;
}
$this->forms[$k] = $v;
if( $_k=='p' )
{
$this->posts[$k] = $v;
} else {
$this->gets[$k] = $v;
}
}
}
}
unset($_POST);
unset($_GET);
unset($_REQUEST);
//处理cookie
if( count($_COOKIE) > 0 )
{
foreach($_COOKIE as $k=>$v)
{
if( preg_match('/^config/i', $k) )
{
continue;
}
$this->cookies[$k] = $v;
}
}
//unset($_POST, $_GET);
//上传的文件处理
if( isset($_FILES) && count($_FILES) > 0 )
{
$this->FilterFiles($_FILES);
}
$this->isinit = TRUE;
//global变量
//self::$forms['_global'] = $GLOBALS;
}
/**
* 把 eval 重命名为 myeval
*/
function MyEval( $phpcode )
{
return eval( $phpcode );
}
/**
* 获得指定表单值
*/
function Item( $formname, $defaultvalue = '' )
{
return isset($this->forms[$formname]) ? $this->forms[$formname] : $defaultvalue;
}
/**
* 获得指定临时文件名值
*/
function Upfile( $formname, $defaultvalue = '' )
{
return isset($this->files[$formname]['tmp_name']) ? $this->files[$formname]['tmp_name'] : $defaultvalue;
}
/**
* 过滤文件相关
*/
function FilterFiles( &$files )
{
foreach($files as $k=>$v)
{
$this->files[$k] = $v;
}
unset($_FILES);
}
/**
* 移动上传的文件
*/
function MoveUploadFile( $formname, $filename, $filetype = '' )
{
if( $this->IsUploadFile( $formname ) )
{
if( preg_match($this->filter_filename, $filename) )
{
return FALSE;
}
else
{
return move_uploaded_file($this->files[$formname]['tmp_name'], $filename);
}
}
}
/**
* 获得文件的扩展名
*/
function GetShortname( $formname )
{
$filetype = strtolower(isset($this->files[$formname]['type']) ? $this->files[$formname]['type'] : '');
$shortname = '';
switch($filetype)
{
case 'image/jpeg':
$shortname = 'jpg';
break;
case 'image/pjpeg':
$shortname = 'jpg';
break;
case 'image/gif':
$shortname = 'gif';
break;
case 'image/png':
$shortname = 'png';
break;
case 'image/xpng':
$shortname = 'png';
break;
case 'image/wbmp':
$shortname = 'bmp';
break;
default:
$filename = isset($this->files[$formname]['name']) ? $this->files[$formname]['name'] : '';
if( preg_match("/\./", $filename) )
{
$fs = explode('.', $filename);
$shortname = strtolower($fs[ count($fs)-1 ]);
}
break;
}
return $shortname;
}
/**
* 获得指定文件表单的文件详细信息
*/
function GetFileInfo( $formname, $item = '' )
{
if( !isset( $this->files[$formname]['tmp_name'] ) )
{
return FALSE;
}
else
{
if($item=='')
{
return $this->files[$formname];
}
else
{
return (isset($this->files[$formname][$item]) ? $this->files[$formname][$item] : '');
}
}
}
/**
* 判断是否存在上传的文件
*/
function IsUploadFile( $formname )
{
if( !isset( $this->files[$formname]['tmp_name'] ) )
{
return FALSE;
}
else
{
return is_uploaded_file( $this->files[$formname]['tmp_name'] );
}
}
/**
* 检查文件后缀是否为指定值
*
* @param string $subfix
* @return boolean
*/
function CheckSubfix($formname, $subfix = 'csv')
{
if( $this->GetShortname( $formname ) != $subfix)
{
return FALSE;
}
return TRUE;
}
}