PluginProbe
Wp-Insert / 1.7.2
Wp-Insert v1.7.2
trunk 1.0 1.1 1.2 1.2.1 1.2.2 1.3.0 1.3.1 1.3.3 1.4 1.5.0 1.5.1 1.5.2 1.5.3 1.6.0 1.6.1 1.6.2 1.7 1.7.1 1.7.2 1.7.3 1.7.4 1.7.5 1.7.6 2.0 All 63 releases
wp-insert / fckeditor / editor / filemanager / connectors / php / util.php

util.php in Wp-Insert 1.7.2, at fckeditor/editor/filemanager/connectors/php/util.php

221 lines 5.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /*
3 * FCKeditor - The text editor for Internet - http://www.fckeditor.net
4 * Copyright (C) 2003-2009 Frederico Caldeira Knabben
5 *
6 * == BEGIN LICENSE ==
7 *
8 * Licensed under the terms of any of the following licenses at your
9 * choice:
10 *
11 * - GNU General Public License Version 2 or later (the "GPL")
12 * http://www.gnu.org/licenses/gpl.html
13 *
14 * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
15 * http://www.gnu.org/licenses/lgpl.html
16 *
17 * - Mozilla Public License Version 1.1 or later (the "MPL")
18 * http://www.mozilla.org/MPL/MPL-1.1.html
19 *
20 * == END LICENSE ==
21 *
22 * Utility functions for the File Manager Connector for PHP.
23 */
24
25 function RemoveFromStart( $sourceString, $charToRemove )
26 {
27 $sPattern = '|^' . $charToRemove . '+|' ;
28 return preg_replace( $sPattern, '', $sourceString ) ;
29 }
30
31 function RemoveFromEnd( $sourceString, $charToRemove )
32 {
33 $sPattern = '|' . $charToRemove . '+$|' ;
34 return preg_replace( $sPattern, '', $sourceString ) ;
35 }
36
37 function FindBadUtf8( $string )
38 {
39 $regex =
40 '([\x00-\x7F]'.
41 '|[\xC2-\xDF][\x80-\xBF]'.
42 '|\xE0[\xA0-\xBF][\x80-\xBF]'.
43 '|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}'.
44 '|\xED[\x80-\x9F][\x80-\xBF]'.
45 '|\xF0[\x90-\xBF][\x80-\xBF]{2}'.
46 '|[\xF1-\xF3][\x80-\xBF]{3}'.
47 '|\xF4[\x80-\x8F][\x80-\xBF]{2}'.
48 '|(.{1}))';
49
50 while (preg_match('/'.$regex.'/S', $string, $matches)) {
51 if ( isset($matches[2])) {
52 return true;
53 }
54 $string = substr($string, strlen($matches[0]));
55 }
56
57 return false;
58 }
59
60 function ConvertToXmlAttribute( $value )
61 {
62 if ( defined( 'PHP_OS' ) )
63 {
64 $os = PHP_OS ;
65 }
66 else
67 {
68 $os = php_uname() ;
69 }
70
71 if ( strtoupper( substr( $os, 0, 3 ) ) === 'WIN' || FindBadUtf8( $value ) )
72 {
73 return ( utf8_encode( htmlspecialchars( $value ) ) ) ;
74 }
75 else
76 {
77 return ( htmlspecialchars( $value ) ) ;
78 }
79 }
80
81 /**
82 * Check whether given extension is in html etensions list
83 *
84 * @param string $ext
85 * @param array $htmlExtensions
86 * @return boolean
87 */
88 function IsHtmlExtension( $ext, $htmlExtensions )
89 {
90 if ( !$htmlExtensions || !is_array( $htmlExtensions ) )
91 {
92 return false ;
93 }
94 $lcaseHtmlExtensions = array() ;
95 foreach ( $htmlExtensions as $key => $val )
96 {
97 $lcaseHtmlExtensions[$key] = strtolower( $val ) ;
98 }
99 return in_array( $ext, $lcaseHtmlExtensions ) ;
100 }
101
102 /**
103 * Detect HTML in the first KB to prevent against potential security issue with
104 * IE/Safari/Opera file type auto detection bug.
105 * Returns true if file contain insecure HTML code at the beginning.
106 *
107 * @param string $filePath absolute path to file
108 * @return boolean
109 */
110 function DetectHtml( $filePath )
111 {
112 $fp = @fopen( $filePath, 'rb' ) ;
113
114 //open_basedir restriction, see #1906
115 if ( $fp === false || !flock( $fp, LOCK_SH ) )
116 {
117 return -1 ;
118 }
119
120 $chunk = fread( $fp, 1024 ) ;
121 flock( $fp, LOCK_UN ) ;
122 fclose( $fp ) ;
123
124 $chunk = strtolower( $chunk ) ;
125
126 if (!$chunk)
127 {
128 return false ;
129 }
130
131 $chunk = trim( $chunk ) ;
132
133 if ( preg_match( "/<!DOCTYPE\W*X?HTML/sim", $chunk ) )
134 {
135 return true;
136 }
137
138 $tags = array( '<body', '<head', '<html', '<img', '<pre', '<script', '<table', '<title' ) ;
139
140 foreach( $tags as $tag )
141 {
142 if( false !== strpos( $chunk, $tag ) )
143 {
144 return true ;
145 }
146 }
147
148 //type = javascript
149 if ( preg_match( '!type\s*=\s*[\'"]?\s*(?:\w*/)?(?:ecma|java)!sim', $chunk ) )
150 {
151 return true ;
152 }
153
154 //href = javascript
155 //src = javascript
156 //data = javascript
157 if ( preg_match( '!(?:href|src|data)\s*=\s*[\'"]?\s*(?:ecma|java)script:!sim', $chunk ) )
158 {
159 return true ;
160 }
161
162 //url(javascript
163 if ( preg_match( '!url\s*\(\s*[\'"]?\s*(?:ecma|java)script:!sim', $chunk ) )
164 {
165 return true ;
166 }
167
168 return false ;
169 }
170
171 /**
172 * Check file content.
173 * Currently this function validates only image files.
174 * Returns false if file is invalid.
175 *
176 * @param string $filePath absolute path to file
177 * @param string $extension file extension
178 * @param integer $detectionLevel 0 = none, 1 = use getimagesize for images, 2 = use DetectHtml for images
179 * @return boolean
180 */
181 function IsImageValid( $filePath, $extension )
182 {
183 if (!@is_readable($filePath)) {
184 return -1;
185 }
186
187 $imageCheckExtensions = array('gif', 'jpeg', 'jpg', 'png', 'swf', 'psd', 'bmp', 'iff');
188
189 // version_compare is available since PHP4 >= 4.0.7
190 if ( function_exists( 'version_compare' ) ) {
191 $sCurrentVersion = phpversion();
192 if ( version_compare( $sCurrentVersion, "4.2.0" ) >= 0 ) {
193 $imageCheckExtensions[] = "tiff";
194 $imageCheckExtensions[] = "tif";
195 }
196 if ( version_compare( $sCurrentVersion, "4.3.0" ) >= 0 ) {
197 $imageCheckExtensions[] = "swc";
198 }
199 if ( version_compare( $sCurrentVersion, "4.3.2" ) >= 0 ) {
200 $imageCheckExtensions[] = "jpc";
201 $imageCheckExtensions[] = "jp2";
202 $imageCheckExtensions[] = "jpx";
203 $imageCheckExtensions[] = "jb2";
204 $imageCheckExtensions[] = "xbm";
205 $imageCheckExtensions[] = "wbmp";
206 }
207 }
208
209 if ( !in_array( $extension, $imageCheckExtensions ) ) {
210 return true;
211 }
212
213 if ( @getimagesize( $filePath ) === false ) {
214 return false ;
215 }
216
217 return true;
218 }
219
220 ?>
221