Jump to content

pintix

Moderadores en la reserva
  • Content Count

    2063
  • Joined

  • Last visited

Community Reputation

0 Neutral

About pintix

  • Rank
    Ande andará?
  • Birthday 04/26/1966
  1. Seguramente es por que se espera el guión "escapado" con la barra invertida, aunque si el guión es el primer elemento de una expresión regular no hace falta que lo esté... (uf, hablo de un clarooo, claro, meridiano, :D ) Prueba con: regexunidioma = /\-[c]/g; regexotroidioma = /\-[e]/g;
  2. Buaaaaahhhh, soy un hombre poseido por el vicio del código, creo que tendré que ir a terapia... XD Lo que hace el script es buscar todas las coincidencias de -c o -e y las cambia por el contrario de lo que encuentra, espero que esa fuese la idea.... <html> <body> <script type="text/javascript"> function cambia_entre_2_idiomas (){ regexunidioma = /-[c]/g; regexotroidioma = /-[e]/g; la_url = document.location.href; if (la_url.search (regexunidioma) != -1){ nova_url = la_url.replace (regexunidioma,"-e"); document.location.href = nova_url; } else if (la_url.search (regexotroidioma) != -1){ nova_url = la_url.replace (regexotroidioma,"-c"); document.location.href = nova_url; } } </script> <a href="#" onclick="cambia_entre_2_idiomas ()">cambia idioma</a> </body> </html>
  3. No se si llego un poco tarde... ¿Aún te interesa que le de una vueltecita al tema? Aunque no se si habré aprendido algo desde el 2003... y he acabado un proyecto en javascript un poco denso y no se si no estoy saturado, pero como es bien sabido que soy un vicioso del código...
  4. Parece que el tema ZFS se vuelve a mover, según Macrumors.
  5. Cuando te encuentras la foto a tus pies. La hoja de verdad igual no estaba exactamente en esa posición, pero tampoco he tardado más de 4 segundos en colocarla, que entre el bastón con el que voy estos días y la vergüenza de estar fotografiando el suelo no quería perder más tiempo. Fotografiado con el móvil, que es lo que llevaba encima. Camera: Sony Ericsson C905. Lens: 5.9 mm. Exposure: Auto exposure, 1/1,250 sec, f/2.8, ISO 64
  6. He creado una clase en PHP para comprobar que los pares de clave y valor de un GET a los que enlazamos en un una página no han sido modificados por el usuario en la barra de direcciones del navegador. La pongo en este tema por si a alguien le puede resultar de utilidad. Es un ejemplo que se debe modificar para que tenga un uso práctico ya que lo único que hace por ahora es comprobar si se han modificado, o no, los datos. Espero que con la documentación que tiene se entienda su uso. Como podreis ver en los comentarios del código una de las primeras cosas que habría que hacer es cambiar la contraseña que usa para las comprobaciones. La utilidad que yo le he encontrado es la de que los usuarios no accedan a datos a los que no está previsto que lo hagan, por ejemplo los resultados correctos de un cuestionario. Creo que también se puede usar para mejorar la seguridad de un sitio web, ya que comprueba la integridad de los datos enviados sin utilizar ni sesiones, ni conexiones a bases de datos, pero no pondría la mano en el fuego de que sea el 100% seguro, ya que no soy experto en el tema. La clase iría en el archivo seguridadpareshash.php <?php /** * Seguridad GET con un hash MD5 * * Comprueba en el script de destino que los datos de un query al que enlaza nuestra pagina * son los originales * * Puede ser útil, por ejemplo, cuando queremos dar listas con soluciones a ejercicios * a medida que avanza un curso. Con unos pares solucion / tema para que si una combinacion * de número de solucion y tema no esta en lista de la pagina no pueda ser visto por el * usuario utilizando la barra de direcciones */ class CompruebaGetEntrePaginas { private $palabraSecreta; private $GETconHash = ''; // Genera un GET con un codigo de comprobacion al final public function GeneraGETconHash ($ArrayVariables) { $Liga = ""; foreach ($ArrayVariables as $UnaLlave => $UnValor){ $GETconHash .= $Liga.$UnaLlave."=".$UnValor; $Liga = "&"; } $GETconHash = "?".$GETconHash; $palabraSecreta = $this->GeneraPalabraSecreta (); $ArrayVariables["palabraSecreta"] = $palabraSecreta; $ClaveHash = hash ("md5",serialize($ArrayVariables)); $GETconHash .= $Liga."ps=".$ClaveHash; return $GETconHash; } // Genera una URL completa, simplemente sirve para que haya menos funciones en la creación de la lista public function GeneraURL ($ElArrayVariables,$CadenaScript = "") { $elGETconHash = $this->GeneraGETconHash ($ElArrayVariables); $PrefijoURL = (empty($CadenaScript))? $_SERVER["PHP_SELF"] : $CadenaScript; $URLcompleta = $PrefijoURL.$elGETconHash; return $URLcompleta; } // Comprueba que no se ha modificado la URL public function CompruebaGETconHash () { $ArrayTrabajo = $_GET; $ValorHash = array_pop ($ArrayTrabajo); $palabraSecreta = $this->GeneraPalabraSecreta (); $ArrayTrabajo["palabraSecreta"] = $palabraSecreta; $ValorEsperadoHash = hash ("md5",serialize($ArrayTrabajo)); $comparacionValores = ($ValorHash == $ValorEsperadoHash)? TRUE : FALSE; return $comparacionValores; } // Para mas seguridad se deberia reescribir esta funcion para leer el valor de una base de datos private function GeneraPalabraSecreta () { return 'flghusf'; } } ?> Un ejemplo de lista (con un solo elemento, que para probar ya es suficiente ;) ) <?php include_once ("seguridadpareshash.php"); // Iniciamos la clase de creacion/comprobacion $CreaCompruebaURL = new CompruebaGetEntrePaginas (); // En esta variable ponemos el nombre del script PHP. Si esta vacio // o no esta definido se usa $_SERVER["PHP_SELF"] $NombreScriptDestino = "resultadosprueba.php"; // En este array asociativo ponemos los pares de datos que iran en el GET $DatosGet = Array("solucion" => "12","tema" => "25"); // Aqui creamos el URL. La variable $NombreScriptDestino es opcional $nuevaURL = $CreaCompruebaURL->GeneraURL ($DatosGet,$NombreScriptDestino); // Mostramos el resultado en pantalla print ('<a href="'.$nuevaURL.'">Resultados al ejercicio 12 del tema 25</a>'); ?> Comprobación de los resultados en resultadosprueba.php <?php include_once ("seguridadpareshash.php"); $CreaCompruebaURL = new CompruebaGetEntrePaginas (); // Comprobamos que coincide elcontenido de las variables de GET con el hash MD5 final if ($CreaCompruebaURL->CompruebaGETconHash ()){ echo "Datos URL originales"; } else { echo "Datos URL modificados"; } ?> Podeis ametrallarme a preguntas para cualquier cosa que no se entienda. También se aceptan aportaciones al código. compruebagethash.zip
  7. No creas, yo también aprendo, ya que así puedo ver que no funciona en todos los entornos y estoy sobre aviso. En los comentarios del manual de PHP he visto que el problema puede ser que $_SERVER["DOCUMENT_ROOT"] a veces apunta a un directorio que no es exactamente la raiz. Los ejemplos que ponen son que el valor de la variable sea /htdocs/www, pero en realidad los documentos estén, por ejemplo, dentro de /htdocs/www/public_html. Lo que yo haría para comprobarlo es poner temporalmente un echo $_SERVER["DOCUMENT_ROOT"]; para ver que valor tiene y si coincide con mi ruta de archivos. Después añadiría lo que falta en una variable, pero no deja de ser un apaño. La de tiempo que hacen perder estas inconsistencias...
  8. He hecho una versión con la carpeta relativa al script php desde el que se incluye el documento. En mis entornos funciona, aunque también funcionaba la anterior versión... está claro que esto de la programación no es una ciencia exacta. ;) <?php // Las dos variables que se pueden modificar $laextension = ".php"; // si la extension esta aqui y no en la variable no damos pistas $carpetaincludes = "proves/"; // la carpeta donde pueden estar los includes, como es relativa no ponemos la barra inicial $elnombrearchivo = $_GET['p']; if (isset($elnombrearchivo) && preg_match ("/^[0-9a-zA-Z_\-]+$/",$elnombrearchivo)) { $laurlcompleta = $carpetaincludes.$elnombrearchivo.$laextension; if (file_exists($laurlcompleta)) { include($laurlcompleta); } else { echo "Mensaje de error archivo no encontrado"; } } else { echo "Mensaje de error variable no válida"; } ?>
  9. Añado que en mi servidor tambien funciona, desde el directorio raiz como tu y creando la carpeta proves... así que no veo porque no debería funcionar en los tuyos ¿Te da algún error? ¿Si pones un echo $raizservidor."<br>"; que te pone?
  10. Lo del que no funcione la versión paranoide puede ser si estás dentro de otra carpeta en el servidor, con lo cual sería "/micarpeta/proves/", ya que utiliza la ruta de carpetas desde la raiz del servidor web. Lo del guión se arregla añadiendo el guión al pattern con lo siguiente (yo también tardé años en controlar las expresiones y aún tengo que tirar de chuleta y ejemplos para utilizarlas): if (isset($elnombrearchivo) && preg_match ("/^[0-9a-zA-Z_\-]+$/",$elnombrearchivo)) {
  11. De nada! He encontrado en uno de mis proyectos la versión paranoica, ya que comprueba incluso que estamos en la raiz de documentos del servidor web y comprueba la carpeta que se supone que tienen que estar los includes. La pongo a efectos informativos ya que no se si es necesaria esta seguridad redundante (no soy experto en seguridad), deberíamos pedir a los expertos en seguridad de la casa que se pasen por aquí para estar seguros. <?php // Las dos variables que se pueden modificar $laextension = ".php"; // si la extension esta aqui y no en la variable no damos pistas de lo que hacemos $carpetaincludes = "/proves/"; // la carpeta donde deben estar los includes $elnombrearchivo = $_GET['p']; $raizservidor = $_SERVER["DOCUMENT_ROOT"]; if (isset($elnombrearchivo) && preg_match ("/^[0-9a-zA-Z_]+$/",$elnombrearchivo)) { $laurlcompleta = $raizservidor.$carpetaincludes.$elnombrearchivo.$laextension; if (file_exists($laurlcompleta)) { include($laurlcompleta); } else { echo "Mensaje de error archivo no encontrado"; } } else { echo "Mensaje de error variable no válida"; } ?>
  12. Ahora voy y la casco, pero con el código de Quim y con una pueba en mi ordenador he podido acceder a un log de sistema simplemente con lo siguiente: http://localhost/proves/provaexploit.php?p=../../../Logs/unlogcualquiera.log Así que yo diría que no se debería hacer de esta forma, ya que en manos de alguien con más conocimientos que los mios puede ser una bomba. Lo que yo hago en estos casos es o acceder a los datos de la URL desde una base de datos o un array; o montar la URL comprobando que el usuario no ha puesto ningún carácter extraño, como detallo a continuación: <?php $laurl = $_GET['p']; if (isset($laurl) && preg_match ("/^[0-9a-zA-Z]+$/",$laurl)) { $laurlcompleta = $laurl.".php"; if (@!include($laurlcompleta)) { echo "Mensaje de error"; } } else { echo "Mensaje de error"; } ?> Y otra vuelta de tuerca... Tampoco debería ser una solución poner un @ para saltarse un warning, mejor poner una comprobación de error que "tapar" un error, ya que acostumbrarse a esto también es peligroso. Lo dejaría así: <?php $laurl = $_GET['p']; if (isset($laurl) && preg_match ("/^[0-9a-zA-Z_]+$/",$laurl)) { $laurlcompleta = $laurl.".php"; if (file_exists($laurlcompleta)) { include($laurlcompleta); } else { echo "Mensaje de error"; } } else { echo "Mensaje de error"; } ?>
  13. Si has seguido las intrucciones de el manual, como parece, el documento juanvegas.html que te crea ya es el documento web, no tienes que hacer nada más. Si lo subes tal cual al servidor, con la carpeta y el documento html en www.juanvegas.es/juanvegas.html tendrías que ver el resultado... y si quieres que salga directamente cuando pongas www.juanvegas.es renombra el documento como index.html. ¿Por cierto, estás seguro que has subido la carpeta juanvegas_Resources/ al servidor? Por que a mi me sale como documento no encontrado... o no la has subido o hay un problema con el nombre.
  14. Para quien quiera documentarse se trata del Data URI scheme. Aunque Outlook, y supongo que otros gestores de correo, lo hace un poco diferente y pone los datos al final del mensaje y una referencia a ellos en la imagen, que es lo que debió pasar cuando esa persona le dio a reenviar.
  15. Tuve que hacerlo hace ya un tiempo con phpmailer. He encontrado esa parte de código, que iría tal que así: include_once ("phpmailer/class.phpmailer.php"); $titolnoticia = $_POST['titolnoticia']; $textnoticia = $_POST['textnoticia']; $email = $_POST['email']; function posa_text ($textposar,$untext){ $noutext = str_replace ("<!-- cosmissatge -->",$textposar,$untext); //$noutext = addslashes ($noutext); return $noutext; } if ($tempfile = file_get_contents ("plantilla.php")){ $eltext = "<p class=\"titol\">".$titolnoticia."</p>\r<p class=\"eltext\">".$textnoticia."</p>"; $textveure = posa_text ($eltext,$tempfile); $mail = new phpmailer(); $mail->From = "myname@example.com"; $mail->FromName = "Newsletter en proves"; $mail->Subject = "Newsletter Filmoteca"; $mail->Host = "imaginatic.com"; $mail->Mailer = "smtp"; $mail->isHTML (true); $mail->Body = $textveure; //$mail->AltBody = $eltext; $mail->AddAddress($email,""); $mail->AddEmbeddedImage ("ccultura_vermell.gif","cculturaimage"); $mail->AddEmbeddedImage ("ctransparent.gif","ctransparentimage"); if(!$mail->Send()){ echo "There has been a mail error<br>"; } else { echo "Missatge enviat"; } } Cuando en un correo en formato HTML se refieren a "embeber" las imágenes quiere decir que las imágenes van al final del mensaje como texto codificado (lo que no recuerdo es el formato ahora mismo, pero supongo que Base64). Esto es lo que hace $mail->AddEmbeddedImage.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.