Ça y est la première release de PyGitWeb est sortie!
Il s’agit de la version 0.1.
Elle est stable mais ne propose qu’un nombre limité de fonctionalités.
Fonctionalités :
- Vue principale :
On affiche la liste des dépôts du serveur avec leur dernier commit. Si on clique sur l’un des dépôt on ouvre la vue vue détaillée du dépôt.
- Vue détaillé d’un dépôt :
On affiche un menu sous le dernier commit. Ce menu permet d’aller dans le répertoire du dépôt (pratique si c’est un site web), d’afficher la liste des commits et leurs détails, et d’afficher le diff s’il y a eu des modifications depuis le dernier commit.
Démo et download :
Si vous voulez le tester ou le télécharger (lien en bas de la page) : http://pygitweb.julienpecqueur.com.
Comme tu fais appelle directement aux commandes git, je me suis permis de faire une petite vérification du code niveau sécurité. Je n’ai pas trouvé de problème au niveau de l’exécution des commandes, par contre j’ai trouvé un petit problème de Cross-Site Scripting dans le titre de la page.
Exemple : http://78.232.69.135/dev/pygitweb/PyGitWeb.py?repo=%3C/title%3E%3C/head%3E%3Cbody%3E%3Cscript%3Ealert%28%27xss%27%29%3C/script%3E&alone=no
Il faudrait faire un encodage des caractères spéciaux html avant de les inclure dans la page.
Merci de l’info!
J’ai fait un patch rapide pour bloquer les balises dans l’url :
diff –git a/PyGitWeb.py b/PyGitWeb.py
index 047c57f..3b55c78 100755
— a/PyGitWeb.py
+++ b/PyGitWeb.py
@@ -141,6 +141,7 @@ class WebPage:
if self.url.debug == “yes”:
self.content.append(“
“)
self.content.append(“DEBUG: “+self.url.url+”
“)
+ self.content.append(“DEBUG: “+str(cgi.FieldStorage())+”")
self.content.append(“
“)
# Loop on each repo extracted :
for res in self.brut:
@@ -217,7 +218,10 @@ class WebPage:
line = ““+line[0:-1]+” ”
self.content.append(line)
self.content.append(“")
-
+ if len(self.brut) < 1:
+ self.content.append("
ERROR !
Log: " \
+ +str(cgi.FieldStorage())+"")
+
def render(self):
""" Render the web page """
for line in self.page:
@@ -264,7 +268,8 @@ class Url:
""" Gets http parameters (GET). """
para = cgi.FieldStorage()
# repo - name of the active repo :
- if para.has_key("repo"):
+ if para.has_key("repo") and not \
+ ("< " in para["repo"].value or ">" in para["repo"].value):
self.repo = para["repo"].value
else:
self.repo = None
Version fix sécurité disponible : v0.1.1 sur http://pygitweb.julienpecqueur.com