Subversion Repositories SmartDukaan

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
13532 anikendra 1
<?php
2
/**
3
 * SanitizeTest file
4
 *
5
 * CakePHP(tm) Tests <http://book.cakephp.org/2.0/en/development/testing.html>
6
 * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
7
 *
8
 * Licensed under The MIT License
9
 * For full copyright and license information, please see the LICENSE.txt
10
 * Redistributions of files must retain the above copyright notice
11
 *
12
 * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
13
 * @link          http://book.cakephp.org/2.0/en/development/testing.html CakePHP(tm) Tests
14
 * @package       Cake.Test.Case.Utility
15
 * @since         CakePHP(tm) v 1.2.0.5428
16
 * @license       http://www.opensource.org/licenses/mit-license.php MIT License
17
 */
18
 
19
App::uses('Sanitize', 'Utility');
20
 
21
/**
22
 * DataTest class
23
 *
24
 * @package       Cake.Test.Case.Utility
25
 */
26
class SanitizeDataTest extends CakeTestModel {
27
 
28
/**
29
 * useTable property
30
 *
31
 * @var string
32
 */
33
	public $useTable = 'data_tests';
34
}
35
 
36
/**
37
 * Article class
38
 *
39
 * @package       Cake.Test.Case.Utility
40
 */
41
class SanitizeArticle extends CakeTestModel {
42
 
43
/**
44
 * useTable property
45
 *
46
 * @var string
47
 */
48
	public $useTable = 'articles';
49
}
50
 
51
/**
52
 * SanitizeTest class
53
 *
54
 * @package       Cake.Test.Case.Utility
55
 */
56
class SanitizeTest extends CakeTestCase {
57
 
58
/**
59
 * autoFixtures property
60
 *
61
 * @var boolean
62
 */
63
	public $autoFixtures = false;
64
 
65
/**
66
 * fixtures property
67
 *
68
 * @var array
69
 */
70
	public $fixtures = array('core.data_test', 'core.article');
71
 
72
/**
73
 * testEscapeAlphaNumeric method
74
 *
75
 * @return void
76
 */
77
	public function testEscapeAlphaNumeric() {
78
		$resultAlpha = Sanitize::escape('abc', 'test');
79
		$this->assertEquals('abc', $resultAlpha);
80
 
81
		$resultNumeric = Sanitize::escape('123', 'test');
82
		$this->assertEquals('123', $resultNumeric);
83
 
84
		$resultNumeric = Sanitize::escape(1234, 'test');
85
		$this->assertEquals(1234, $resultNumeric);
86
 
87
		$resultNumeric = Sanitize::escape(1234.23, 'test');
88
		$this->assertEquals(1234.23, $resultNumeric);
89
 
90
		$resultNumeric = Sanitize::escape('#1234.23', 'test');
91
		$this->assertEquals('#1234.23', $resultNumeric);
92
 
93
		$resultNull = Sanitize::escape(null, 'test');
94
		$this->assertEquals(null, $resultNull);
95
 
96
		$resultNull = Sanitize::escape(false, 'test');
97
		$this->assertEquals(false, $resultNull);
98
 
99
		$resultNull = Sanitize::escape(true, 'test');
100
		$this->assertEquals(true, $resultNull);
101
	}
102
 
103
/**
104
 * testClean method
105
 *
106
 * @return void
107
 */
108
	public function testClean() {
109
		$string = 'test & "quote" \'other\' ;.$ symbol.' . "\r" . 'another line';
110
		$expected = 'test &amp; &quot;quote&quot; &#039;other&#039; ;.$ symbol.another line';
111
		$result = Sanitize::clean($string, array('connection' => 'test'));
112
		$this->assertEquals($expected, $result);
113
 
114
		$string = 'test & "quote" \'other\' ;.$ symbol.' . "\r" . 'another line';
115
		$expected = 'test & ' . Sanitize::escape('"quote"', 'test') . ' ' . Sanitize::escape('\'other\'', 'test') . ' ;.$ symbol.another line';
116
		$result = Sanitize::clean($string, array('encode' => false, 'connection' => 'test'));
117
		$this->assertEquals($expected, $result);
118
 
119
		$string = 'test & "quote" \'other\' ;.$ \\$ symbol.' . "\r" . 'another line';
120
		$expected = 'test & "quote" \'other\' ;.$ $ symbol.another line';
121
		$result = Sanitize::clean($string, array('encode' => false, 'escape' => false, 'connection' => 'test'));
122
		$this->assertEquals($expected, $result);
123
 
124
		$string = 'test & "quote" \'other\' ;.$ \\$ symbol.' . "\r" . 'another line';
125
		$expected = 'test & "quote" \'other\' ;.$ \\$ symbol.another line';
126
		$result = Sanitize::clean($string, array('encode' => false, 'escape' => false, 'dollar' => false, 'connection' => 'test'));
127
		$this->assertEquals($expected, $result);
128
 
129
		$string = 'test & "quote" \'other\' ;.$ symbol.' . "\r" . 'another line';
130
		$expected = 'test & "quote" \'other\' ;.$ symbol.' . "\r" . 'another line';
131
		$result = Sanitize::clean($string, array('encode' => false, 'escape' => false, 'carriage' => false, 'connection' => 'test'));
132
		$this->assertEquals($expected, $result);
133
 
134
		$array = array(array('test & "quote" \'other\' ;.$ symbol.' . "\r" . 'another line'));
135
		$expected = array(array('test &amp; &quot;quote&quot; &#039;other&#039; ;.$ symbol.another line'));
136
		$result = Sanitize::clean($array, array('connection' => 'test'));
137
		$this->assertEquals($expected, $result);
138
 
139
		$array = array(array('test & "quote" \'other\' ;.$ \\$ symbol.' . "\r" . 'another line'));
140
		$expected = array(array('test & "quote" \'other\' ;.$ $ symbol.another line'));
141
		$result = Sanitize::clean($array, array('encode' => false, 'escape' => false, 'connection' => 'test'));
142
		$this->assertEquals($expected, $result);
143
 
144
		$array = array(array('test odd Ä spacesé'));
145
		$expected = array(array('test odd &Auml; spaces&eacute;'));
146
		$result = Sanitize::clean($array, array('odd_spaces' => false, 'escape' => false, 'connection' => 'test'));
147
		$this->assertEquals($expected, $result);
148
 
149
		$array = array(array('\\$', array('key' => 'test & "quote" \'other\' ;.$ \\$ symbol.' . "\r" . 'another line')));
150
		$expected = array(array('$', array('key' => 'test & "quote" \'other\' ;.$ $ symbol.another line')));
151
		$result = Sanitize::clean($array, array('encode' => false, 'escape' => false, 'connection' => 'test'));
152
		$this->assertEquals($expected, $result);
153
 
154
		$string = '';
155
		$expected = '';
156
		$result = Sanitize::clean($string, array('connection' => 'test'));
157
		$this->assertEquals($expected, $string);
158
 
159
		$data = array(
160
			'Grant' => array(
161
				'title' => '2 o clock grant',
162
				'grant_peer_review_id' => 3,
163
				'institution_id' => 5,
164
				'created_by' => 1,
165
				'modified_by' => 1,
166
				'created' => '2010-07-15 14:11:00',
167
				'modified' => '2010-07-19 10:45:41'
168
			),
169
			'GrantsMember' => array(
170
 
171
					'id' => 68,
172
					'grant_id' => 120,
173
					'member_id' => 16,
174
					'program_id' => 29,
175
					'pi_percent_commitment' => 1
176
				)
177
			)
178
		);
179
		$result = Sanitize::clean($data, array('connection' => 'test'));
180
		$this->assertEquals($data, $result);
181
	}
182
 
183
/**
184
 * testHtml method
185
 *
186
 * @return void
187
 */
188
	public function testHtml() {
189
		$string = '<p>This is a <em>test string</em> & so is this</p>';
190
		$expected = 'This is a test string &amp; so is this';
191
		$result = Sanitize::html($string, array('remove' => true));
192
		$this->assertEquals($expected, $result);
193
 
194
		$string = 'The "lazy" dog \'jumped\' & flew over the moon. If (1+1) = 2 <em>is</em> true, (2-1) = 1 is also true';
195
		$expected = 'The &quot;lazy&quot; dog &#039;jumped&#039; &amp; flew over the moon. If (1+1) = 2 &lt;em&gt;is&lt;/em&gt; true, (2-1) = 1 is also true';
196
		$result = Sanitize::html($string);
197
		$this->assertEquals($expected, $result);
198
 
199
		$string = 'The "lazy" dog \'jumped\'';
200
		$expected = 'The &quot;lazy&quot; dog \'jumped\'';
201
		$result = Sanitize::html($string, array('quotes' => ENT_COMPAT));
202
		$this->assertEquals($expected, $result);
203
 
204
		$string = 'The "lazy" dog \'jumped\'';
205
		$result = Sanitize::html($string, array('quotes' => ENT_NOQUOTES));
206
		$this->assertEquals($string, $result);
207
 
208
		$string = 'The "lazy" dog \'jumped\' & flew over the moon. If (1+1) = 2 <em>is</em> true, (2-1) = 1 is also true';
209
		$expected = 'The &quot;lazy&quot; dog &#039;jumped&#039; &amp; flew over the moon. If (1+1) = 2 &lt;em&gt;is&lt;/em&gt; true, (2-1) = 1 is also true';
210
		$result = Sanitize::html($string);
211
		$this->assertEquals($expected, $result);
212
 
213
		$string = 'The "lazy" dog & his friend Apple&reg; conquered the world';
214
		$expected = 'The &quot;lazy&quot; dog &amp; his friend Apple&amp;reg; conquered the world';
215
		$result = Sanitize::html($string);
216
		$this->assertEquals($expected, $result);
217
 
218
		$string = 'The "lazy" dog & his friend Apple&reg; conquered the world';
219
		$expected = 'The &quot;lazy&quot; dog &amp; his friend Apple&reg; conquered the world';
220
		$result = Sanitize::html($string, array('double' => false));
221
		$this->assertEquals($expected, $result);
222
	}
223
 
224
/**
225
 * testStripWhitespace method
226
 *
227
 * @return void
228
 */
229
	public function testStripWhitespace() {
230
		$string = "This     sentence \t\t\t has lots of \n\n white\nspace \rthat \r\n needs to be    \t    \n trimmed.";
231
		$expected = "This sentence has lots of whitespace that needs to be trimmed.";
232
		$result = Sanitize::stripWhitespace($string);
233
		$this->assertEquals($expected, $result);
234
 
235
		$text = 'I    love  ßá†ö√    letters.';
236
		$result = Sanitize::stripWhitespace($text);
237
		$expected = 'I love ßá†ö√ letters.';
238
		$this->assertEquals($expected, $result);
239
	}
240
 
241
/**
242
 * testParanoid method
243
 *
244
 * @return void
245
 */
246
	public function testParanoid() {
247
		$string = 'I would like to !%@#% & dance & sing ^$&*()-+';
248
		$expected = 'Iwouldliketodancesing';
249
		$result = Sanitize::paranoid($string);
250
		$this->assertEquals($expected, $result);
251
 
252
		$string = array('This |s th% s0ng that never ends it g*es',
253
						'on and on my friends, b^ca#use it is the',
254
						'so&g th===t never ends.');
255
		$expected = array('This s th% s0ng that never ends it g*es',
256
						'on and on my friends bcause it is the',
257
						'sog tht never ends.');
258
		$result = Sanitize::paranoid($string, array('%', '*', '.', ' '));
259
		$this->assertEquals($expected, $result);
260
 
261
		$string = "anything' OR 1 = 1";
262
		$expected = 'anythingOR11';
263
		$result = Sanitize::paranoid($string);
264
		$this->assertEquals($expected, $result);
265
 
266
		$string = "x' AND email IS NULL; --";
267
		$expected = 'xANDemailISNULL';
268
		$result = Sanitize::paranoid($string);
269
		$this->assertEquals($expected, $result);
270
 
271
		$string = "x' AND 1=(SELECT COUNT(*) FROM users); --";
272
		$expected = 'xAND1SELECTCOUNTFROMusers';
273
		$result = Sanitize::paranoid($string);
274
		$this->assertEquals($expected, $result);
275
 
276
		$string = "x'; DROP TABLE members; --";
277
		$expected = 'xDROPTABLEmembers';
278
		$result = Sanitize::paranoid($string);
279
		$this->assertEquals($expected, $result);
280
	}
281
 
282
/**
283
 * testStripImages method
284
 *
285
 * @return void
286
 */
287
	public function testStripImages() {
288
		$string = '<img src="/img/test.jpg" alt="my image" />';
289
		$expected = 'my image<br />';
290
		$result = Sanitize::stripImages($string);
291
		$this->assertEquals($expected, $result);
292
 
293
		$string = '<img src="javascript:alert(\'XSS\');" />';
294
		$expected = '';
295
		$result = Sanitize::stripImages($string);
296
		$this->assertEquals($expected, $result);
297
 
298
		$string = '<a href="http://www.badsite.com/phising"><img src="/img/test.jpg" alt="test image alt" title="test image title" id="myImage" class="image-left"/></a>';
299
		$expected = '<a href="http://www.badsite.com/phising">test image alt</a><br />';
300
		$result = Sanitize::stripImages($string);
301
		$this->assertEquals($expected, $result);
302
 
303
		$string = '<a onclick="medium()" href="http://example.com"><img src="foobar.png" onclick="evilFunction(); return false;"/></a>';
304
		$expected = '<a onclick="medium()" href="http://example.com"></a>';
305
		$result = Sanitize::stripImages($string);
306
		$this->assertEquals($expected, $result);
307
	}
308
 
309
/**
310
 * testStripScripts method
311
 *
312
 * @return void
313
 */
314
	public function testStripScripts() {
315
		$string = '<link href="/css/styles.css" media="screen" rel="stylesheet" />';
316
		$expected = '';
317
		$result = Sanitize::stripScripts($string);
318
		$this->assertEquals($expected, $result);
319
 
320
		$string = '<link href="/css/styles.css" media="screen" rel="stylesheet" />' . "\n" .
321
			'<link rel="icon" href="/favicon.ico" type="image/x-icon" />' . "\n" .
322
			'<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />' . "\n" .
323
			'<link rel="alternate" href="/feed.xml" title="RSS Feed" type="application/rss+xml" />';
324
		$expected = "\n" . '<link rel="icon" href="/favicon.ico" type="image/x-icon" />' . "\n" .
325
			'<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />' . "\n" .
326
			'<link rel="alternate" href="/feed.xml" title="RSS Feed" type="application/rss+xml" />';
327
		$result = Sanitize::stripScripts($string);
328
		$this->assertEquals($expected, $result);
329
 
330
		$string = '<script type="text/javascript"> alert("hacked!");</script>';
331
		$expected = '';
332
		$result = Sanitize::stripScripts($string);
333
		$this->assertEquals($expected, $result);
334
 
335
		$string = '<script> alert("hacked!");</script>';
336
		$expected = '';
337
		$result = Sanitize::stripScripts($string);
338
		$this->assertEquals($expected, $result);
339
 
340
		$string = '<style>#content { display:none; }</style>';
341
		$expected = '';
342
		$result = Sanitize::stripScripts($string);
343
		$this->assertEquals($expected, $result);
344
 
345
		$string = '<style type="text/css"><!-- #content { display:none; } --></style>';
346
		$expected = '';
347
		$result = Sanitize::stripScripts($string);
348
		$this->assertEquals($expected, $result);
349
 
350
		$string = <<<HTML
351
text
352
<style type="text/css">
353
<!--
354
#content { display:none; }
355
-->
356
</style>
357
text
358
HTML;
359
		$expected = "text\n\ntext";
360
		$result = Sanitize::stripScripts($string);
361
		$this->assertTextEquals($expected, $result);
362
 
363
		$string = <<<HTML
364
text
365
<script type="text/javascript">
366
<!--
367
alert('wooo');
368
-->
369
</script>
370
text
371
HTML;
372
		$expected = "text\n\ntext";
373
		$result = Sanitize::stripScripts($string);
374
		$this->assertTextEquals($expected, $result);
375
	}
376
 
377
/**
378
 * testStripAll method
379
 *
380
 * @return void
381
 */
382
	public function testStripAll() {
383
		$string = '<img """><script>alert("xss")</script>"/>';
384
		$expected = '"/>';
385
		$result = Sanitize::stripAll($string);
386
		$this->assertEquals($expected, $result);
387
 
388
		$string = '<IMG SRC=&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116&#0000058&#0000097&#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039&#0000041>';
389
		$expected = '';
390
		$result = Sanitize::stripAll($string);
391
		$this->assertEquals($expected, $result);
392
 
393
		$string = '<<script>alert("XSS");//<</script>';
394
		$expected = '<';
395
		$result = Sanitize::stripAll($string);
396
		$this->assertEquals($expected, $result);
397
 
398
		$string = '<img src="http://google.com/images/logo.gif" onload="window.location=\'http://sam.com/\'" />' . "\n" .
399
			"<p>This is ok      \t\n   text</p>\n" .
400
			'<link rel="stylesheet" href="/css/master.css" type="text/css" media="screen" title="my sheet" charset="utf-8">' . "\n" .
401
			'<script src="xss.js" type="text/javascript" charset="utf-8"></script>';
402
		$expected = '<p>This is ok text</p>';
403
		$result = Sanitize::stripAll($string);
404
		$this->assertEquals($expected, $result);
405
	}
406
 
407
/**
408
 * testStripTags method
409
 *
410
 * @return void
411
 */
412
	public function testStripTags() {
413
		$string = '<h2>Headline</h2><p><a href="http://example.com">My Link</a> could go to a bad site</p>';
414
		$expected = 'Headline<p>My Link could go to a bad site</p>';
415
		$result = Sanitize::stripTags($string, 'h2', 'a');
416
		$this->assertEquals($expected, $result);
417
 
418
		$string = '<script type="text/javascript" src="http://evildomain.com"> </script>';
419
		$expected = ' ';
420
		$result = Sanitize::stripTags($string, 'script');
421
		$this->assertEquals($expected, $result);
422
 
423
		$string = '<h2>Important</h2><p>Additional information here <a href="/about"><img src="/img/test.png" /></a>. Read even more here</p>';
424
		$expected = 'Important<p>Additional information here <img src="/img/test.png" />. Read even more here</p>';
425
		$result = Sanitize::stripTags($string, 'h2', 'a');
426
		$this->assertEquals($expected, $result);
427
 
428
		$string = '<h2>Important</h2><p>Additional information here <a href="/about"><img src="/img/test.png" /></a>. Read even more here</p>';
429
		$expected = 'Important<p>Additional information here . Read even more here</p>';
430
		$result = Sanitize::stripTags($string, 'h2', 'a', 'img');
431
		$this->assertEquals($expected, $result);
432
 
433
		$string = '<b>Important message!</b><br>This message will self destruct!';
434
		$expected = 'Important message!<br>This message will self destruct!';
435
		$result = Sanitize::stripTags($string, 'b');
436
		$this->assertEquals($expected, $result);
437
 
438
		$string = '<b>Important message!</b><br />This message will self destruct!';
439
		$expected = 'Important message!<br />This message will self destruct!';
440
		$result = Sanitize::stripTags($string, 'b');
441
		$this->assertEquals($expected, $result);
442
 
443
		$string = '<h2 onclick="alert(\'evil\'); onmouseover="badness()">Important</h2><p>Additional information here <a href="/about"><img src="/img/test.png" /></a>. Read even more here</p>';
444
		$expected = 'Important<p>Additional information here . Read even more here</p>';
445
		$result = Sanitize::stripTags($string, 'h2', 'a', 'img');
446
		$this->assertEquals($expected, $result);
447
	}
448
}