git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCHv1 2/2] gitweb: Serve */*+xml 'blob_plain' as text/plain with $prevent_xss

From
Jakub Narebski <jnareb@gmail.com>
Date
Jun 30, 2011, 09:39 UTC
Message-ID
<1309426761-819-3-git-send-email-jnareb@gmail.com>
In-Reply-To
<1309426761-819-1-git-send-email-jnareb@gmail.com>

Enhance usability of 'blob_plain' view protection against XSS attacks (enabled by setting $prevent_xss to true) by serving contents inline as safe 'text/plain' mimetype where possible, instead of serving with "Content-Disposition: attachment" to make sure they don't run in gitweb's security domain.

This patch broadens downgrading to 'text/plain' further, to any */*+xml mimetype. This includes:

  application/xhtml+xml    (*.xhtml, *.xht)
  application/atom+xml     (*.atom)
  application/rss+xml      (*.rss)
  application/mathml+xm    (*.mathml)
  application/docbook+xml  (*.docbook)
  image/svg+xml            (*.svg, *.svgz)

Probably most useful is serving XHTML files as text/plain in 'blob_plain' view, directly viewable.

Because file with 'image/svg+xml' mimetype can be compressed SVGZ file, we have to check if */*+xml really is text file, via '-T $fd'.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
---
This patch is new.
 gitweb/gitweb.perl |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index cb2e7bc..ae6244c 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -6143,7 +6143,8 @@ sub git_blob_plain {
 
 	# serve text/* as text/plain
 	if ($prevent_xss &&
-	    $type =~ m!^text/[a-z]+\b(.*)$!) {
+	    ($type =~ m!^text/[a-z]+\b(.*)$! ||
+	     ($type =~ m!^[a-z]+/[a-z]\+xml\b(.*)$! && -T $fd))) {
 		my $rest = $1;
 		$rest = defined $rest ? $rest : '';
 		$type = "text/plain$rest";
-- 
1.7.5
Previous: Junio C Hamano
Message 4 of 4 in “[PATCHv2 0/2] gitweb: Make $prevent_xss protection for 'blob_plain' more usable”
  1. Jakub NarebskiJun 30, 2011
  2. 1/2 gitweb: Serve text/* 'blob_plain' as text/plain with $prevent_xssJakub Narebski, Jun 30, 2011
  3. Junio C HamanoJun 30, 2011
  4. 2/2 gitweb: Serve */*+xml 'blob_plain' as text/plain with $prevent_xssJakub Narebski, Jun 30, 2011

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.