File: 023_fix_xss_in_bbcode.diff

package info (click to toggle)
phpbb2 2.0.21-6
  • links: PTS
  • area: main
  • in suites: etch-m68k
  • size: 4,224 kB
  • ctags: 12
  • sloc: sh: 476; makefile: 108; perl: 29; php: 21
file content (32 lines) | stat: -rw-r--r-- 1,527 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
diff -ur phpBB2.orig/includes/bbcode.php phpBB2/includes/bbcode.php
--- phpBB2.orig/includes/bbcode.php	2006-06-09 16:29:41.000000000 +0200
+++ phpBB2/includes/bbcode.php	2006-07-03 13:26:27.000000000 +0200
@@ -194,13 +194,17 @@
 	$patterns = array();
 	$replacements = array();
 
+ 	// These are the URL schemas we trust to be safe. This is to prevent
+ 	// cross side scripting with javascript:, chrome: etc urls.
+ 	$allowed_urlschemas = '(?:http|https|ftp|news|nntp|telnet|gopher|mailto)';
+
 	// [img]image_url_here[/img] code..
 	// This one gets first-passed..
-	$patterns[] = "#\[img:$uid\]([^?](?:[^\[]+|\[(?!url))*?)\[/img:$uid\]#i";
+	$patterns[] = "#\[img:$uid\]($allowed_urlschemas://[^ \"\n\r\t<]*?)\[/img:$uid\]#si";
 	$replacements[] = $bbcode_tpl['img'];
 
 	// matches a [url]xxxx://www.phpbb.com[/url] code..
-	$patterns[] = "#\[url\]([\w]+?://([\w\#$%&~/.\-;:=,?@\]+]+|\[(?!url=))*?)\[/url\]#is";
+	$patterns[] = "#\[url\]($allowed_urlschemas://[\w\#$%&~/.\-;:=,?@\[\]+]*?)\[/url\]#is";
 	$replacements[] = $bbcode_tpl['url1'];
 
 	// [url]www.phpbb.com[/url] code.. (no xxxx:// prefix).
@@ -208,7 +212,7 @@
 	$replacements[] = $bbcode_tpl['url2'];
 
 	// [url=xxxx://www.phpbb.com]phpBB[/url] code..
-	$patterns[] = "#\[url=([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*?)\]([^?\n\r\t].*?)\[/url\]#is";
+	$patterns[] = "#\[url=($allowed_urlschemas://[\w\#$%&~/.\-;:=,?@\[\]+]*?)\]([^?\n\r\t].*?)\[/url\]#is";
 	$replacements[] = $bbcode_tpl['url3'];
 
 	// [url=www.phpbb.com]phpBB[/url] code.. (no xxxx:// prefix).