[cpif] r185 - in trunk: . frontend-web

svn at argo.es svn at argo.es
Fri Jun 22 19:02:17 CEST 2007


Author: jcea
Date: Fri Jun 22 19:02:17 2007
New Revision: 185

Log:
Aparte de comprobar si los campos en el POST estan
vacios o no, comprobamos tambien que existan.

Es un mecanismo de proteccion ante ataques.



Modified:
   trunk/TODO
   trunk/frontend-web/url_nuevo_hilo_POST.py
   trunk/frontend-web/url_nuevo_post_POST.py
   trunk/frontend-web/url_nuevo_usuario_POST.py

Modified: trunk/TODO
==============================================================================
--- trunk/TODO	(original)
+++ trunk/TODO	Fri Jun 22 19:02:17 2007
@@ -133,3 +133,7 @@
 - 20070621: Si que podemos tener metatags vacios... Limpiar
   codigo al respecto.
 
+- 20070622: FRONTAL WEB: Verificar los mensajes escritos. Por
+  ejemplo, no se deberia poder abrir un hilo con un titulo
+  excesivamente largo o de mas de una linea.
+

Modified: trunk/frontend-web/url_nuevo_hilo_POST.py
==============================================================================
--- trunk/frontend-web/url_nuevo_hilo_POST.py	(original)
+++ trunk/frontend-web/url_nuevo_hilo_POST.py	Fri Jun 22 19:02:17 2007
@@ -2,6 +2,14 @@
 
 from globales import monitor
 
+def pagina_error(texto) :
+  import skins
+  pagina = skins.Skin(path,usuario)
+  pagina.load_dict({"page_title": "Error"})
+  pagina.load_url(["error"])
+  pagina.load_dict({"generic_message": "<h1>%s</h1>" %texto})
+  return pagina.web()
+
 @monitor
 def gestiona_url(conn,handler,path,usuario) :
 
@@ -19,9 +27,18 @@
   import cgi
   ctype,pdict=cgi.parse_header(handler.headers.getheader('content-type'))
   cuerpo=cgi.FieldStorage(fp=handler.rfile,headers=handler.headers,environ={'REQUEST_METHOD':'POST'},keep_blank_values=1)
-  titulo=cgi.escape(cuerpo.getfirst("titulo"))
-  texto=cgi.escape(cuerpo.getfirst("texto"))
+  titulo=cuerpo.getfirst("titulo")
+  texto=cuerpo.getfirst("texto")
+  if not (titulo and texto)  : # Incluye tanto el caso de vacios como de inexistentes
+    return pagina_error("El T&iacute;tulo y el Texto no pueden estar vacios")
+  titulo=cgi.escape(titulo)
+  texto=cgi.escape(texto)
   texto=texto.replace("\r","").replace("\n","<br/>\r\n")
   database.mensaje_add(conn,texto,usuario,titulo=titulo,metatag=metatag)
   return (302,{"Location":"/indice/%d" %metatag},"")
+
+
+    pagina.load_url(["error"])
+    pagina.load_dict({"generic_message": "<h1>No puedes dejar ningun campo no opcional en blanco</h1>"})
+    return (pagina.web())
 

Modified: trunk/frontend-web/url_nuevo_post_POST.py
==============================================================================
--- trunk/frontend-web/url_nuevo_post_POST.py	(original)
+++ trunk/frontend-web/url_nuevo_post_POST.py	Fri Jun 22 19:02:17 2007
@@ -2,6 +2,14 @@
 
 from globales import monitor
 
+def pagina_error(texto) :
+  import skins
+  pagina = skins.Skin(path,usuario)
+  pagina.load_dict({"page_title": "Error"})
+  pagina.load_url(["error"])
+  pagina.load_dict({"generic_message": "<h1>%s</h1>" %texto})
+  return pagina.web()
+
 @monitor
 def gestiona_url(conn,handler,path,usuario) :
 
@@ -20,7 +28,10 @@
   import cgi
   ctype,pdict=cgi.parse_header(handler.headers.getheader('content-type'))
   cuerpo=cgi.FieldStorage(fp=handler.rfile,headers=handler.headers,environ={'REQUEST_METHOD':'POST'},keep_blank_values=1)
-  texto=cgi.escape(cuerpo.getfirst("texto"))
+  texto=cuerpo.getfirst("texto")
+  if not texto : # Incluye tanto el caso de vacio como de inexistente
+    return pagina_error("El Texto no puede estar vacio")
+  texto=cgi.escape(texto)
   texto=texto.replace("\r","").replace("\n","<br/>\r\n")
   database.mensaje_add(conn,texto,usuario,hilo=hilo)
   return (302,{"Location":"/indice/%d" %metatag}, "")

Modified: trunk/frontend-web/url_nuevo_usuario_POST.py
==============================================================================
--- trunk/frontend-web/url_nuevo_usuario_POST.py	(original)
+++ trunk/frontend-web/url_nuevo_usuario_POST.py	Fri Jun 22 19:02:17 2007
@@ -22,18 +22,28 @@
   import cgi
   ctype,pdict=cgi.parse_header(handler.headers.getheader('content-type'))
   cuerpo=cgi.FieldStorage(fp=handler.rfile,headers=handler.headers,environ={'REQUEST_METHOD':'POST'},keep_blank_values=1)
-  nick=cuerpo.getfirst("usuario").strip()
-  clave1=cuerpo.getfirst("clave1").strip()
-  clave2=cuerpo.getfirst("clave2").strip()
+  nick=cuerpo.getfirst("usuario")
+  clave1=cuerpo.getfirst("clave1")
+  clave2=cuerpo.getfirst("clave2")
+  if not (nick and clave1 and clave2) : # Comprobamos el caso de campos inexistentes
+    pagina.load_url(["error"])
+    pagina.load_dict({"generic_message": "<h1>No puedes dejar ningun campo no opcional en blanco</h1>"})
+    return pagina.web()
+
+  nick=nick.strip()
+  clave1=clave1.strip()
+  clave2=clave2.strip()
   OpenIDs=set()
   for i in xrange(1,6) :
-    OpenID=cuerpo.getfirst("OpenID%d" %i).strip()
-    if OpenID : OpenIDs.add(OpenID)
+    OpenID=cuerpo.getfirst("OpenID%d" %i)
+    if OpenID : # Comprobamos el caso de campos inexistentes
+      OpenID=OpenID.strip()
+      if OpenID : OpenIDs.add(OpenID)
 
   if not (nick and clave1 and clave2) :
     pagina.load_url(["error"])
     pagina.load_dict({"generic_message": "<h1>No puedes dejar ningun campo no opcional en blanco</h1>"})
-    return (pagina.web())
+    return pagina.web()
 
   if clave1!=clave2 :
     pagina.load_url(["error"])



More information about the cpif mailing list