This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include
, or for example
via PHP's auto-loading mechanism.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | /** |
||
3 | * User Agent Generator |
||
4 | * @version 1.0 |
||
5 | * @link https://github.com/Dreyer/random-uagent |
||
6 | * @author Dreyer |
||
7 | */ |
||
8 | |||
9 | class UAgent |
||
10 | { |
||
11 | // General token that says the browser is Mozilla compatible, |
||
12 | // and is common to almost every browser today. |
||
13 | const MOZILLA = 'Mozilla/5.0 '; |
||
14 | |||
15 | /** |
||
16 | * Processors by Arch. |
||
17 | */ |
||
18 | public static $processors = array( |
||
19 | 'lin' => array( 'i686', 'x86_64' ), |
||
20 | 'mac' => array( 'Intel', 'PPC', 'U; Intel', 'U; PPC' ), |
||
21 | 'win' => array( 'foo' ) |
||
22 | ); |
||
23 | |||
24 | /** |
||
25 | * Browsers |
||
26 | * |
||
27 | * Weighting is based on market share to determine frequency. |
||
28 | */ |
||
29 | public static $browsers = array( |
||
30 | 34 => array( |
||
31 | 89 => array( 'chrome', 'win' ), |
||
32 | 9 => array( 'chrome', 'mac' ), |
||
33 | 2 => array( 'chrome', 'lin' ) |
||
34 | ), |
||
35 | 32 => array( |
||
36 | 100 => array( 'iexplorer', 'win' ) |
||
37 | ), |
||
38 | 25 => array( |
||
39 | 83 => array( 'firefox', 'win' ), |
||
40 | 16 => array( 'firefox', 'mac' ), |
||
41 | 1 => array( 'firefox', 'lin' ) |
||
42 | ), |
||
43 | 7 => array( |
||
44 | 95 => array( 'safari', 'mac' ), |
||
45 | 4 => array( 'safari', 'win' ), |
||
46 | 1 => array( 'safari', 'lin' ) |
||
47 | ), |
||
48 | 2 => array( |
||
49 | 91 => array( 'opera', 'win' ), |
||
50 | 6 => array( 'opera', 'lin' ), |
||
51 | 3 => array( 'opera', 'mac' ) |
||
52 | ) |
||
53 | ); |
||
54 | |||
55 | /** |
||
56 | * List of Lanuge Culture Codes (ISO 639-1) |
||
57 | * |
||
58 | * @see: http://msdn.microsoft.com/en-gb/library/ee825488(v=cs.20).aspx |
||
59 | */ |
||
60 | public static $languages = array( |
||
61 | 'af-ZA', 'ar-AE', 'ar-BH', 'ar-DZ', 'ar-EG', 'ar-IQ', 'ar-JO', 'ar-KW', 'ar-LB', |
||
62 | 'ar-LY', 'ar-MA', 'ar-OM', 'ar-QA', 'ar-SA', 'ar-SY', 'ar-TN', 'ar-YE', 'be-BY', |
||
63 | 'bg-BG', 'ca-ES', 'cs-CZ', 'Cy-az-AZ', 'Cy-sr-SP', 'Cy-uz-UZ', 'da-DK', 'de-AT', |
||
64 | 'de-CH', 'de-DE', 'de-LI', 'de-LU', 'div-MV', 'el-GR', 'en-AU', 'en-BZ', 'en-CA', |
||
65 | 'en-CB', 'en-GB', 'en-IE', 'en-JM', 'en-NZ', 'en-PH', 'en-TT', 'en-US', 'en-ZA', |
||
66 | 'en-ZW', 'es-AR', 'es-BO', 'es-CL', 'es-CO', 'es-CR', 'es-DO', 'es-EC', 'es-ES', |
||
67 | 'es-GT', 'es-HN', 'es-MX', 'es-NI', 'es-PA', 'es-PE', 'es-PR', 'es-PY', 'es-SV', |
||
68 | 'es-UY', 'es-VE', 'et-EE', 'eu-ES', 'fa-IR', 'fi-FI', 'fo-FO', 'fr-BE', 'fr-CA', |
||
69 | 'fr-CH', 'fr-FR', 'fr-LU', 'fr-MC', 'gl-ES', 'gu-IN', 'he-IL', 'hi-IN', 'hr-HR', |
||
70 | 'hu-HU', 'hy-AM', 'id-ID', 'is-IS', 'it-CH', 'it-IT', 'ja-JP', 'ka-GE', 'kk-KZ', |
||
71 | 'kn-IN', 'kok-IN', 'ko-KR', 'ky-KZ', 'Lt-az-AZ', 'lt-LT', 'Lt-sr-SP', 'Lt-uz-UZ', |
||
72 | 'lv-LV', 'mk-MK', 'mn-MN', 'mr-IN', 'ms-BN', 'ms-MY', 'nb-NO', 'nl-BE', 'nl-NL', |
||
73 | 'nn-NO', 'pa-IN', 'pl-PL', 'pt-BR', 'pt-PT', 'ro-RO', 'ru-RU', 'sa-IN', 'sk-SK', |
||
74 | 'sl-SI', 'sq-AL', 'sv-FI', 'sv-SE', 'sw-KE', 'syr-SY', 'ta-IN', 'te-IN', 'th-TH', |
||
75 | 'tr-TR', 'tt-RU', 'uk-UA', 'ur-PK', 'vi-VN', 'zh-CHS', 'zh-CHT', 'zh-CN', 'zh-HK', |
||
76 | 'zh-MO', 'zh-SG', 'zh-TW', |
||
77 | ); |
||
78 | |||
79 | /** |
||
80 | * Generate Device Platform |
||
81 | * |
||
82 | * Uses a random result with a weighting related to frequencies. |
||
83 | */ |
||
84 | public static function generate_platform() |
||
85 | { |
||
86 | $rand = mt_rand( 1, 100 ); |
||
87 | $sum = 0; |
||
88 | |||
89 | foreach ( self::$browsers as $share => $freq_os ) |
||
90 | { |
||
91 | $sum += $share; |
||
92 | |||
93 | if ( $rand <= $sum ) |
||
94 | { |
||
95 | $rand = mt_rand( 1, 100 ); |
||
96 | $sum = 0; |
||
97 | |||
98 | foreach ( $freq_os as $share => $choice ) |
||
99 | { |
||
100 | $sum += $share; |
||
101 | |||
102 | if ( $rand <= $sum ) |
||
103 | { |
||
104 | return $choice; |
||
105 | } |
||
106 | } |
||
107 | } |
||
108 | } |
||
109 | |||
110 | throw new Exception( 'Sum of $browsers frequency is not 100.' ); |
||
111 | } |
||
112 | |||
113 | private static function array_random( $array ) |
||
114 | { |
||
115 | $i = array_rand( $array, 1 ); |
||
116 | |||
117 | return $array[$i]; |
||
118 | } |
||
119 | |||
120 | private static function get_language( $lang = array() ) |
||
121 | { |
||
122 | return self::array_random( empty( $lang ) ? self::$languages : $lang ); |
||
123 | } |
||
124 | |||
125 | private static function get_processor( $os ) |
||
126 | { |
||
127 | return self::array_random( self::$processors[$os] ); |
||
128 | } |
||
129 | |||
130 | private static function get_version_nt() |
||
131 | { |
||
132 | // Win2k (5.0) to Win 7 (6.1). |
||
133 | return mt_rand( 5, 6 ) . '.' . mt_rand( 0, 1 ); |
||
134 | } |
||
135 | |||
136 | private static function get_version_osx() |
||
137 | { |
||
138 | return '10_' . mt_rand( 5, 7 ) . '_' . mt_rand( 0, 9 ); |
||
139 | } |
||
140 | |||
141 | private static function get_version_webkit() |
||
142 | { |
||
143 | return mt_rand( 531, 536 ) . mt_rand( 0, 2 ); |
||
144 | } |
||
145 | |||
146 | private static function get_verison_chrome() |
||
147 | { |
||
148 | return mt_rand( 13, 15 ) . '.0.' . mt_rand( 800, 899 ) . '.0'; |
||
149 | } |
||
150 | |||
151 | private static function get_version_gecko() |
||
152 | { |
||
153 | return mt_rand( 17, 31 ) . '.0'; |
||
154 | } |
||
155 | |||
156 | private static function get_version_ie() |
||
157 | { |
||
158 | return mt_rand( 7, 9 ) . '.0'; |
||
159 | } |
||
160 | |||
161 | private static function get_version_trident() |
||
162 | { |
||
163 | // IE8 (4.0) to IE11 (7.0). |
||
164 | return mt_rand( 4, 7 ) . '.0'; |
||
165 | } |
||
166 | |||
167 | private static function get_version_net() |
||
168 | { |
||
169 | // generic .NET Framework common language run time (CLR) version numbers. |
||
170 | $frameworks = array( |
||
171 | '2.0.50727', |
||
172 | '3.0.4506', |
||
173 | '3.5.30729', |
||
174 | ); |
||
175 | |||
176 | $rev = '.' . mt_rand( 26, 648 ); |
||
177 | |||
178 | return self::array_random( $frameworks ) . $rev; |
||
179 | } |
||
180 | |||
181 | private static function get_version_safari() |
||
182 | { |
||
183 | if ( mt_rand( 0, 1 ) == 0 ) |
||
184 | { |
||
185 | $ver = mt_rand( 4, 5 ) . '.' . mt_rand( 0, 1 ); |
||
186 | } |
||
187 | else |
||
188 | { |
||
189 | $ver = mt_rand( 4, 5 ) . '.0.' . mt_rand( 1, 5 ); |
||
190 | } |
||
191 | |||
192 | return $ver; |
||
193 | } |
||
194 | |||
195 | private static function get_version_opera() |
||
196 | { |
||
197 | return mt_rand( 15, 19 ) . '.0.' . mt_rand( 1147, 1284 ) . mt_rand( 49, 100 ); |
||
198 | } |
||
199 | |||
200 | /** |
||
201 | * Opera |
||
202 | * |
||
203 | * @see: http://dev.opera.com/blog/opera-user-agent-strings-opera-15-and-beyond/ |
||
204 | */ |
||
205 | public static function opera( $arch ) |
||
206 | { |
||
207 | $opera = ' OPR/' . self::get_version_opera(); |
||
208 | |||
209 | // WebKit Rendering Engine (WebKit = Backend, Safari = Frontend). |
||
210 | $engine = self::get_version_webkit(); |
||
211 | $webkit = ' AppleWebKit/' . $engine . ' (KHTML, like Gecko)'; |
||
212 | $chrome = ' Chrome/' . self::get_verison_chrome(); |
||
213 | $safari = ' Safari/' . $engine; |
||
214 | |||
215 | switch ( $arch ) |
||
216 | { |
||
217 | case 'lin': |
||
218 | return '(X11; Linux {proc}) ' . $webkit . $chrome . $safari . $opera; |
||
219 | case 'mac': |
||
220 | $osx = self::get_version_osx(); |
||
221 | return '(Macintosh; U; {proc} Mac OS X ' . $osx . ')' . $webkit . $chrome . $safari . $opera; |
||
222 | case 'win': |
||
223 | // fall through. |
||
224 | default: |
||
225 | $nt = self::get_version_nt(); |
||
226 | return '(Windows NT ' . $nt . '; WOW64) ' . $webkit . $chrome . $safari . $opera; |
||
227 | } |
||
228 | } |
||
229 | |||
230 | /** |
||
231 | * Safari |
||
232 | * |
||
233 | */ |
||
234 | public static function safari( $arch ) |
||
235 | { |
||
236 | $version = ' Version/' . self::get_version_safari(); |
||
237 | |||
238 | // WebKit Rendering Engine (WebKit = Backend, Safari = Frontend). |
||
239 | $engine = self::get_version_webkit(); |
||
240 | $webkit = ' AppleWebKit/' . $engine . ' (KHTML, like Gecko)'; |
||
241 | $safari = ' Safari/' . $engine; |
||
242 | |||
243 | switch ( $arch ) |
||
244 | { |
||
245 | case 'mac': |
||
246 | $osx = self::get_version_osx(); |
||
247 | return '(Macintosh; U; {proc} Mac OS X ' . $osx . '; {lang})' . $webkit . $version . $safari; |
||
248 | case 'win': |
||
249 | // fall through. |
||
250 | default: |
||
251 | $nt = self::get_version_nt(); |
||
252 | return '(Windows; U; Windows NT ' . $nt . ')' . $webkit . $version . $safari; |
||
253 | } |
||
254 | |||
255 | } |
||
256 | |||
257 | /** |
||
258 | * Internet Explorer |
||
259 | * |
||
260 | * @see: http://msdn.microsoft.com/en-gb/library/ms537503(v=vs.85).aspx |
||
261 | */ |
||
262 | public static function iexplorer( $arch ) |
||
0 ignored issues
–
show
|
|||
263 | { |
||
264 | $nt = self::get_version_nt(); |
||
265 | $ie = self::get_version_ie(); |
||
266 | $trident = self::get_version_trident(); |
||
267 | $net = self::get_version_net(); |
||
268 | |||
269 | return '(compatible' |
||
270 | . '; MSIE ' . $ie |
||
271 | . '; Windows NT ' . $nt |
||
272 | . '; WOW64' // A 32-bit version of Internet Explorer is running on a 64-bit processor. |
||
273 | . '; Trident/' . $trident |
||
274 | . '; .NET CLR ' . $net |
||
275 | . ')'; |
||
276 | } |
||
277 | |||
278 | /** |
||
279 | * Firefox User-Agent |
||
280 | * |
||
281 | * @see: https://developer.mozilla.org/en-US/docs/Web/HTTP/Gecko_user_agent_string_reference |
||
282 | */ |
||
283 | public static function firefox( $arch ) |
||
284 | { |
||
285 | // The release version of Gecko. |
||
286 | $gecko = self::get_version_gecko(); |
||
287 | |||
288 | // On desktop, the gecko trail is fixed. |
||
289 | $trail = '20100101'; |
||
290 | |||
291 | $release = 'rv:' . $gecko; |
||
292 | $version = 'Gecko/' . $trail . ' Firefox/' . $gecko; |
||
293 | |||
294 | switch ( $arch ) |
||
295 | { |
||
296 | case 'lin': |
||
297 | return '(X11; Linux {proc}; ' . $release . ') ' . $version; |
||
298 | case 'mac': |
||
299 | $osx = self::get_version_osx(); |
||
300 | return '(Macintosh; {proc} Mac OS X ' . $osx . '; ' . $release . ') ' . $version; |
||
301 | case 'win': |
||
302 | // fall through. |
||
303 | default: |
||
304 | $nt = self::get_version_nt(); |
||
305 | return '(Windows NT ' . $nt . '; {lang}; ' . $release . ') ' . $version; |
||
306 | } |
||
307 | } |
||
308 | |||
309 | public static function chrome( $arch ) |
||
310 | { |
||
311 | $chrome = ' Chrome/' . self::get_verison_chrome(); |
||
312 | |||
313 | // WebKit Rendering Engine (WebKit = Backend, Safari = Frontend). |
||
314 | $engine = self::get_version_webkit(); |
||
315 | $webkit = ' AppleWebKit/' . $engine . ' (KHTML, like Gecko)'; |
||
316 | $safari = ' Safari/' . $engine; |
||
317 | |||
318 | switch ( $arch ) |
||
319 | { |
||
320 | case 'lin': |
||
321 | return '(X11; Linux {proc}) ' . $webkit . $chrome . $safari; |
||
322 | case 'mac': |
||
323 | $osx = self::get_version_osx(); |
||
324 | return '(Macintosh; U; {proc} Mac OS X ' . $osx . ')' . $webkit . $chrome . $safari; |
||
325 | case 'win': |
||
326 | // fall through. |
||
327 | default: |
||
328 | $nt = self::get_version_nt(); |
||
329 | return '(Windows NT ' . $nt . ') ' . $webkit . $chrome . $safari; |
||
330 | } |
||
331 | } |
||
332 | |||
333 | public static function random( $lang = array( 'en-US' ) ) |
||
334 | { |
||
335 | list( $browser, $os ) = self::generate_platform(); |
||
336 | |||
337 | return self::generate( $browser, $os, $lang ); |
||
338 | } |
||
339 | |||
340 | public static function generate( $browser = 'chrome', $os = 'win', $lang = array( 'en-US' ) ) |
||
341 | { |
||
342 | $ua = self::MOZILLA . call_user_func( 'UAgent::' . $browser, $os ); |
||
343 | |||
344 | $tags = array( |
||
345 | '{proc}' => self::get_processor( $os ), |
||
346 | '{lang}' => self::get_language( $lang ), |
||
347 | ); |
||
348 | |||
349 | $ua = str_replace( array_keys( $tags ), array_values( $tags ), $ua ); |
||
350 | |||
351 | return $ua; |
||
352 | } |
||
353 | } |
||
354 | ?> |
||
355 |
This check looks from parameters that have been defined for a function or method, but which are not used in the method body.