RT 4.0.22
[freeside.git] / rt / t / security / CVE-2011-2083-clickable-xss.t
1 use strict;
2 use warnings;
3
4 use RT::Test tests => undef;
5 use Test::Warn;
6
7 my ($base, $m) = RT::Test->started_ok;
8
9 my $ticket = RT::Test->create_ticket(
10     Queue   => 'General',
11     Subject => 'test ticket A',
12 );
13 my $id = $ticket->id;
14 ok $id, "created ticket";
15
16 my @links = (
17     'javascript:alert("xss")',
18     'data:text/html,<script>alert("xss")</script>',
19 );
20
21 for my $link ( map { ($_, ucfirst $_) } @links ) {
22     my ($ok, $msg);
23     warnings_like {
24         ($ok, $msg) = $ticket->AddLink(
25             Type    => 'RefersTo',
26             Target  => $link,
27         );
28     } [qr/Could not determine a URI scheme/, qr/Couldn't resolve/];
29     ok !$ok, $msg;
30
31     ok $m->login, "logged in";
32     $m->get_ok($base);
33     $m->follow_link_ok({ text => 'test ticket A' }, 'ticket page');
34     $m->follow_link_ok({ text => 'Links' }, 'links page');
35     $m->submit_form_ok({
36         with_fields => {
37             "$id-RefersTo" => $link,
38         },
39         button  => 'SubmitTicket',
40     }, 'submitted links page');
41     $m->content_contains("Couldn&#39;t resolve ");
42     $m->next_warning_like(qr/Could not determine a URI scheme/, 'expected warning');
43     $m->next_warning_like(qr/Couldn't resolve/, 'expected warning');
44
45     my $element = $m->find_link( url => $link );
46     ok !$element, "no <a> link";
47 }
48
49 $m->no_leftover_warnings_ok;
50
51 undef $m;
52 done_testing;