Properly use HMAC for secure munging.
[htmlpurifier.git] / tests / HTMLPurifier / URIFilter / MungeTest.php
blob60658da2923f75d82fbc96199dcdd4713c67b122
1 <?php
3 class HTMLPurifier_URIFilter_MungeTest extends HTMLPurifier_URIFilterHarness
6 public function setUp()
8 parent::setUp();
9 $this->filter = new HTMLPurifier_URIFilter_Munge();
12 protected function setMunge($uri = 'http://www.google.com/url?q=%s')
14 $this->config->set('URI.Munge', $uri);
17 protected function setSecureMunge($key = 'secret')
19 $this->setMunge('/redirect.php?url=%s&checksum=%t');
20 $this->config->set('URI.MungeSecretKey', $key);
23 public function testMunge()
25 $this->setMunge();
26 $this->assertFiltering(
27 'http://www.example.com/',
28 'http://www.google.com/url?q=http%3A%2F%2Fwww.example.com%2F'
32 public function testMungeReplaceTagName()
34 $this->setMunge('/r?tagname=%n&url=%s');
35 $token = new HTMLPurifier_Token_Start('a');
36 $this->context->register('CurrentToken', $token);
37 $this->assertFiltering('http://google.com', '/r?tagname=a&url=http%3A%2F%2Fgoogle.com');
40 public function testMungeReplaceAttribute()
42 $this->setMunge('/r?attr=%m&url=%s');
43 $attr = 'href';
44 $this->context->register('CurrentAttr', $attr);
45 $this->assertFiltering('http://google.com', '/r?attr=href&url=http%3A%2F%2Fgoogle.com');
48 public function testMungeReplaceResource()
50 $this->setMunge('/r?embeds=%r&url=%s');
51 $embeds = false;
52 $this->context->register('EmbeddedURI', $embeds);
53 $this->assertFiltering('http://google.com', '/r?embeds=&url=http%3A%2F%2Fgoogle.com');
56 public function testMungeReplaceCSSProperty()
58 $this->setMunge('/r?property=%p&url=%s');
59 $property = 'background';
60 $this->context->register('CurrentCSSProperty', $property);
61 $this->assertFiltering('http://google.com', '/r?property=background&url=http%3A%2F%2Fgoogle.com');
64 public function testIgnoreEmbedded()
66 $this->setMunge();
67 $embeds = true;
68 $this->context->register('EmbeddedURI', $embeds);
69 $this->assertFiltering('http://example.com');
72 public function testProcessEmbedded()
74 $this->setMunge();
75 $this->config->set('URI.MungeResources', true);
76 $embeds = true;
77 $this->context->register('EmbeddedURI', $embeds);
78 $this->assertFiltering('http://www.example.com/', 'http://www.google.com/url?q=http%3A%2F%2Fwww.example.com%2F');
81 public function testPreserveRelative()
83 $this->setMunge();
84 $this->assertFiltering('index.html');
87 public function testMungeIgnoreUnknownSchemes()
89 $this->setMunge();
90 $this->assertFiltering('javascript:foobar();', true);
93 public function testSecureMungePreserve()
95 $this->setSecureMunge();
96 $this->assertFiltering('/local');
99 public function testSecureMungePreserveEmbedded()
101 $this->setSecureMunge();
102 $embedded = true;
103 $this->context->register('EmbeddedURI', $embedded);
104 $this->assertFiltering('http://google.com');
107 public function testSecureMungeStandard()
109 $this->setSecureMunge();
110 $this->assertFiltering('http://google.com', '/redirect.php?url=http%3A%2F%2Fgoogle.com&checksum=46267a796aca0ea5839f24c4c97ad2648373a4eca31b1c0d1fa7c7ff26798f79');
113 public function testSecureMungeIgnoreUnknownSchemes()
115 // This should be integration tested as well to be false
116 $this->setSecureMunge();
117 $this->assertFiltering('javascript:', true);
120 public function testSecureMungeIgnoreUnbrowsableSchemes()
122 $this->setSecureMunge();
123 $this->assertFiltering('news:', true);
126 public function testSecureMungeToDirectory()
128 $this->setSecureMunge();
129 $this->setMunge('/links/%s/%t');
130 $this->assertFiltering('http://google.com', '/links/http%3A%2F%2Fgoogle.com/46267a796aca0ea5839f24c4c97ad2648373a4eca31b1c0d1fa7c7ff26798f79');
133 public function testMungeIgnoreSameDomain()
135 $this->setMunge('http://example.com/%s');
136 $this->assertFiltering('http://example.com/foobar');
139 public function testMungeIgnoreSameDomainInsecureToSecure()
141 $this->setMunge('http://example.com/%s');
142 $this->assertFiltering('https://example.com/foobar');
145 public function testMungeIgnoreSameDomainSecureToSecure()
147 $this->config->set('URI.Base', 'https://example.com');
148 $this->setMunge('http://example.com/%s');
149 $this->assertFiltering('https://example.com/foobar');
152 public function testMungeSameDomainSecureToInsecure()
154 $this->config->set('URI.Base', 'https://example.com');
155 $this->setMunge('/%s');
156 $this->assertFiltering('http://example.com/foobar', '/http%3A%2F%2Fexample.com%2Ffoobar');
159 public function testMungeIgnoresSourceHost()
161 $this->config->set('URI.Host', 'foo.example.com');
162 $this->setMunge('http://example.com/%s');
163 $this->assertFiltering('http://foo.example.com/bar');
168 // vim: et sw=4 sts=4