Jump to content

pintix

Moderadores en la reserva
  • Content Count

    2063
  • Joined

  • Last visited

Everything posted by pintix

  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.
  16. Si tienes el anterior ordenador puedes ver las contraseñas en Utilidades/Acceso a llaveros que es donde se guardan las contraseñas, no en la preferencias o librerias del programa.
  17. La web tiene su <!DOCTYPE html (etc) correspondiente, tiene elementos de párrafo, tiene elementos de encabezado H1... ¿Por qué me puede estar dando el test esos errores tan básicos? Me temo que lo que no le gusta al test debe ser el interlineado o algún caràcter de tu documento y a partir de ahí el pobre programa se lía y no da pie con bola. Probablemente si abres el documento con Textwrangler y le dices que enseñe los invisibles haya algo raro.
  18. Como una imagen vale más que mil palabras, voy a poner una. ;) Si a un navegador le encaja lo que tiene que mostrar el object, en este caso un cubo que equivadría al swf, no se preocupa de lo que hay dentro. Pero si lo que espera es un cilindro, abre la caja y mira qué hay dentro y si hay un cilindro, una imagen, lo muestra. Si lo que esperaba es un sombrero, a su vez miraría si el cilindro no es una caja de sombreros... pero no tengo tiempo de dibujar un sombrero. xD
  19. Estoy con las mismas... en Leopard y con el mismo router, aunque sólo lo quiero para pasar el sonido de iTunes a la cadena de sonido, pero la utilidad airport no ve la Airport Express ¿Encontraste la solución? ¿Alguien más sabe qué puede pasar?
  20. ¿El cliente lo ve desde un servidor? Si es así puede ser que el proveedor de internet no esté sirviendo las cabeceras que digan que es utf-8, si es que algún proveedor lo hace todavía, sinó con otra codificación (se puede mirar con cual, si no recuerdo mal, desde Firefox mirando la información del documento). También puede ser que la fuente usada no tenga acentos en las mayúsculas en el PC... Creo que necesitamos más datos para ayudarte.
  21. Razón tiene Jonno, nos vamos para soporte... Yo lo veo correctamente, también. Sólo veo en la consola que da un error de seguridad de javascript por que intenta acceder a un frame de otro dominio, igual tienes algún programa que bloquee este tipo de webs...
  22. Te daré, que veo que no la he dado aún, mi opinión como catalogador de fotografías en un archivo. El material del que estamos hablando proviene de un fondo de la Library of Congress, que aparte de ser una gran biblioteca / archivo es una de las primeras fuentes de documentación para estudiar la conservación / identificación de material fotográfico y filmográfico. Lo que puedo decirte es que "colarles" una falsificación en un material que está hecho en placas de vidrio no sólo es muy difícil, sinó que, además, sería muy costoso. No veo el mercado de la fotografía antigua tan potente como para montar este tinglado, aunque no estoy diciendo que sea imposible, ya que hay gente que aún realiza y revela fotografías en placas de este tipo (aunque reproducen más bien métodos del siglo XIX). Pero no sólo es hacerlas como en esa época, sinó "envejecerlas" para engañar al que las haya catalogado. Las fotos que yo estudio de estas características son más modernas, relativamente ya que son de los años 30 para adelante, y ya tienen espejo de plata, hongos, defectos en el barniz antihalo y otros defectos que yo puedo decirte que encontraría a faltar si no estuviesen. También está el tema de crear el contenido visual... para hacer la vista de Tbilisi se debería reconstruir gran parte, quitar otra... o el tema de los personajes históricos, buscar alguien que se parezca a la persona retratada... No sé si esto aportará un granito más de sentido común o será tomado como un ejemplo de gremialismo... :D
  23. Lo que no sabes es que los rusos llegaron antes, si te fijas en un reflejo del traje de Armstrong... ¿A que no sabes qué se ve al fondo? :lol:
  24. Aquí se ve que la ciudad está rodeada de un río y varios ladas :P :P Mi link Gracias, gracias, iba a poner una foto casi igual... aunque creo que ni así vamos a convencer a los escépticos. B)
  25. Si sabes leer, mira esto. Aunque igual 1907 no te parece bastante a principios de 1900... aunque me inclino a pensar que intentas trolearnos. Y lo del Lada en medio del rio... :blink:
×
×
  • 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.