elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


  Mostrar Temas
Páginas: 1 2 3 [4] 5 6 7 8 9 10 11 12 13 14 15 16 17 18
31  Programación / PHP / problema de codificación entre mysql y php en: 27 Abril 2016, 18:11 pm
Estoy empezando a migrar (en mysql) de utf8 a utf8mb4 y a la hora de que php muestre contenido con caracteres especiales/acentuados, estos son remplazados por una interrogación con fondo negro ( � ).

Me he asegurado de que todo esté correcto. La base de datos está usando utf8mb4 (todas las tables y columnas con tipo: text, varchar, etc). Los archivos .php todos usan utf-8 (trabajo con visual studio code y esto es por defecto) y los headers, tanto en php como en html, están puestos a utf8.

Despues de instanciar mysqli, cambio el charset de utf8 a utf8mb4:

Código
  1. $mysqli->set_charset('utf8mb4');

Pero si lo dejo en utf8 todo funciona correcto... Y por lo que he estado leyendo, eso no tiene sentido alguno... Ya que en php, la codificación utf8 es completa y soporta hasta 4 bytes pero en mysql utf8 solo soporta hasta 3, por eso si el charset es utf8 pero mysql trabaja con utf8mb4 tiene que hacer conversión y es una perdida de tiempo...

¿Donde creeis que puede estar el problema?
32  Programación / Desarrollo Web / [Resuelto] select2 cambiar valor de lista dinamica con jquery en: 22 Abril 2016, 23:16 pm
Me acaba de dar cuenta de que uno de mis scripts no funciona correctamente. Se trata de 2 de las 3 listas que tengo para seleccionar provincia, ciudad y zona.

La primera lista al no ser dinamica simplemente uso change() para que select2 sepa que el valor ha cambiado y lo refleje (tanto el placeholder como el valor de la lista en sí).

En el caso de las otras dos listas, es algo increible... cada vez que refresco (F5) la página, estas dos listas hacen algo distinto... no sé si es porque son dinamicas, pero no funciona.

Buscando en google he visto que para estos casos se usa la función trigger('change'); y opcionalmente se vuelve a instanciar select2 en el elemento antes de cambiar el valor. Lo estoy haciendo pero sigue sin funcionar:

Tengo un botón para cada lista que muestra con un alert el valor actual de cada lista. La segunda lista a veces muestra el valor y otras no, la tercera siempre muestra 0...

  • El placeholder cambia (puedo ver el nombre de la ciudad/zona), pero al abrir la lista la opción seleccionada es la primera (valor 0).
  • En el caso de la tercera lista (zonas), a veces llega a no suceder absolutamente nada. Otras simplemente cambia el placeholder pero el valor sigue siendo 0.

Código
  1. $(function () {
  2.  
  3.    var province        = <?php echo $province; ?>,
  4.        city            = <?php echo $city; ?>,
  5.        zone            = <?php echo $zone; ?>;
  6.  
  7.    // province
  8.    $('select[name="location[province]"]').val(province).change();
  9.  
  10.    // city
  11.    content = '/get?op=1&id=' + province + '&list=1&admin=1';
  12.    $('select[name="location[city]"]').load(content, function() {
  13.        $(this).select2(); // reinstanciar el plugin
  14.        $(this).val(city).trigger('change');
  15.    });
  16.  
  17.    // zone
  18.    content = '/get?op=1&id=' + city + '&list=2&admin=1';
  19.    $('select[name="location[zone]"]').load(content, function() {
  20.        $(this).select2();
  21.        $(this).val(zone).trigger('change');
  22.    });
  23.  
  24. });

Las tres variables están bien, abro el código fuente de la página y puedo ver que cada una tiene el número (entero).

¿Alguien sabe cual puede ser el problema?

Gracias!
33  Programación / PHP / regex para email catastrophic backtracking en: 19 Abril 2016, 06:24 am
Estoy creando mi propio regex para validar emails pero no consigo hacer funcionar el límite de carácteres de los dos primeros grupos, el tercer grupo si que valida bien el máximo.

Código
  1. /^([\w]+(?:[\.\-][\w]+)*){1,64}@([\w]+(?:[\.\-][\w]+)*){1,64}\.([a-zA-Z]{2,7})$/

Si no me equivoco el error quiere decir que está mal optimizado y le da carga innecesaria al procesador, no?

Como se puede leer, lo que busco es que los guiones actuen de la misma manera que los puntos, que no se puedan poner delante ni detras, solo entre dos caracteres \w. Tanto para el nombre de usuario como para el nombre de dominio.

Gracias!
34  Programación / PHP / regex para protegerse de varios ataques en: 19 Abril 2016, 00:15 am
He estado leyendo sobre distintos tipos de ataques, sobre todo xss. En muchos sitios dicen que es bastente dificil protegerse de este tipo de ataques, sin embargo yo lo encuentro bastante facil:

Código:
input=<script>alert(/xss/);</script>
input=>"><script>alert("XSS")</script>&
input=etc...

Código
  1. echo preg_replace('/\W/', '', $_GET['input'])

Adios XSS... ¿Hay algún otro tipo de ataque que pueda pasar ese regex?

Tambien he leido sobre ataques con codificación utf-16, que no lo he entendido, pero si yo tengo el siguiente regex que permite caracteres internacionales como acentos ñ ç, etc, ¿sería vulnerable a algún tipo de ataque?

Código:
~[^\pL\d]+~u

¿De verdad es tan facil protegerse? No creo que se pueda hacer XSS sin los tags <>, comillas dobles " o los dos puntos : usados en otro lenguaje (que no recuerdo el nombre).

Gracias.
35  Programación / Desarrollo Web / regex para filtrar caracteres especiales en jquery en: 16 Abril 2016, 01:39 am
Quiero crear un regex que me permita filtrar caracteres no deseados (para evitar ataques xss, php y sql) en jquery. Para ello estoy probando dos plugins: filter_input y keyfilter pero ambos me dan error al usar el regex que necesito.

Los caracteres a permitir serian alphanumericos (a-zA-z0-9), espacios (a ser posible solo 1 entre caracteres) y los siguientes: ". : , - + ¿? ¡! ' ñ ç" y vocales con acentos y dieresis (pero no por separado).

He encontrado varios regex pero en cuanto intento añadir algún caracter de los arriba mencionados me da un error y no lo toma, ocurre con ambos plugins...

La idea es permitir elegir que caracteres especiales usar para cada input y luego usarlo en php con preg_replace por si se manipula el javascript.

¿Alguna idea de por qué esos dos plugins no aceptan regex con esos carácteres?

Tampoco es que tenga mucha idea de regex, a lo mejor lo estoy haciendo mal, pero otros los he sacado de respuestas que están funcionando, no sé...

Gracias!
36  Programación / PHP / [solucionado] mysqli rollback todos los insert si uno falla en: 10 Abril 2016, 03:31 am
Tengo un script que sube datos a diferentes tablas mysql y necesito que si un insert falla, no se haga ninguno. Para ello he estado leyendo y creo tener una idea clara:

Código
  1. $mysqli = new mysqli(/* datos de conexión */);
  2. $mysqli->autocommit(FALSE);
  3.  
  4. // el rollback lo dejará todo como estaba aquí
  5. $mysqli->begin_transaction();
  6.  
  7. if ($stmt_uno = $mysqli->prepare('INSERT INTO tabla_principal (uno, dos, tres) VALUES (?, ?, ?)')) {
  8.    $stmt_uno->bind_param('sss', $uno, $dos, $tres);
  9.    $stmt_uno->execute();
  10.  
  11.    $id = (int) $mysqli->insert_id;
  12.  
  13.    if ($stmt_dos = $mysqli->prepare('INSERT INTO sub_tabla (principal_id, cuatro) VALUES (?, ?)')) {
  14.        $stmt_dos->bind_param('is', $id, $cuatro);
  15.        $stmt_dos->execute();
  16.    }
  17.  
  18.    if ($stmt_tres = $mysqli->prepare('INSERT INTO sub_tabla_dos (principal_id, cinco) VALUES (?, ?)')) {
  19.        $stmt_tres->bind_param('is', $id, $cinco);
  20.        $stmt_tres->execute();
  21.    }
  22. }
  23.  
  24.  
  25. if ($mysqli->commit()) {
  26.    // todo correcto, se redirige
  27.    header('Location: /');
  28. } else {
  29.    // algo ha salido mal, se llama rollback
  30.    $mysqli->rollback();
  31.    // y se muestra un mensaje de error
  32. }

Todavía no lo he probado, pero no estoy seguro de si es así o hay que comprobar cada execute()...

¿Alguien puede corregirme?

Gracias!

Edito: cambio la estructura, el resto de inserts dependen del primero, pero si cualquiera falla no debe insertarse nada.
37  Programación / PHP / sistema de visitas (contador) en: 8 Abril 2016, 03:52 am
Necesito crear un sistema de visitas que cuente las visitas a ciertas páginas de mi web (algo asi como el contador de visitas de los videos de youtube), pero no busco nada exacto o estricto (como comprobar que el mismo usuario se conecta desde otro navegador distinto), pero un mínimo de integridad para que no se hagan trampas.

Más que nada lo que necesito es un poco de orientación ya que no tengo ni idea de como hacer esto, me refiero a la manera de "contar" cada vez que la página en cuestión carga, si limitar por ip o "unique brower id" y por tiempo; las visitas cuentan 1 vez al dia, cada hora, etc... ¿Qué es lo más común para mostar a los visitantes cuantas veces se ha visto dicha página?

Sobre el tema de la privacidad (por la necesidad de identificar al usuario), decir que en un principio esta información se debería usar única y exclusivamente en el servicio ofrecido por la web en cuestión y en caso de ofrecer servicios extra como: contenido favorito, reciente, etc pues al visitar la página por primera vez (o si se borran las cookies) está el aviso que informa del uso y si se acepta perfecto y si no también (la web sigue funcionando pero sin ofrecer dichos servicios extra). Lo comento porque soy el primero en contra de ciertas practicas abusivas, sucias y rastreras...

He estado buscando y leyendo sobre el tema, diferencias sobre "pageviews" y "hits" y más o menos eso está claro, pero sigo dudando sobre la manera de hacer esto. También he leido en un mensaje más abajo sobre "browser fingerprinting" que es sobre lo que me he estado informando un poquito, pero me queda una gran duda:

Yo genero el identificador unico basado en la informacion del navegador, pero si se conecta otro navegador con la misma información que pasa? Mismo navegador, sistema operativo, resolución, drivers gráficos, zona horaria, etc... aun que no lo parezca es información que se puede repetir varias veces por lo que da la sensación de no ser adecuado.

Por otra parte he leido sobre usar el elemento canvas de html5, y bueno, la duda sigue quedando: una vez generado el identificador, ¿como hago para compararlo con el navegador que acceda a mi página?

Una vez la idea está clara, implementar un sistema es de lo más sencillo y divertido  :)

Gracias!
38  Programación / Bases de Datos / [SOLUCIONADO] mysql no usa la variable por defecto cuando no se inserta nada en: 3 Abril 2016, 05:42 am
Hola buenas, estoy teniendo complicaciones para configurar las tablas de mi base de datos y poder trabajar correctamente con la aplicación web php.

Por ejemplo, en un INSERT que hago a X tabla, algunas variables pueden no existir (!isset) por lo que mysql debería introducir en el campo el valor default que se le especifica a la columna cuando se crea la tabla.

Yo uso sqlyog community para crear y gestionar las tablas, y las columnas que pueden ser opcionales les puse un valor default para que no se quede (NULL) y no haya problemas al hacer los select y comprobar el valor. Al principio probé activando la opción "Not Null?" pero al parecer si la variable a insertar no existe da error (diciendo que no puede ser null) pero debería usar el default. Probé desactivando dicha opción pero nada, se sigue quedando la columna (NULL) cuando se insertan variables opcionales que no están declaradas.

¿Cual creeis que puede ser el problema? A lo mejor me creo que el default sirve para esto pero resulta que es para otra cosa (aunque no lo creo)...

Gracias!
39  Programación / PHP / [Solucionado] variables dinamicas dentro de funciones ( is_numeric($$variable) ) en: 29 Marzo 2016, 03:54 am
Hola, estoy intentando crear un script que declare y limpie las variables de formularios largos, donde hayan arrays de numeros y strings, pero utilizando un whitelist para los nombres de los elementos. Me están dando errores:

Citar
Warning: Illegal string offset 'name' in /home/aet/website.com/pages/upload.php on line 34

Notice: Undefined variable: a in /home/aet/website.com/pages/upload.php on line 34
Y
Citar
Warning: Illegal string offset 'name' in /home/aet/website.com/pages/upload.php on line 38

Notice: Undefined variable: a in /home/aet/website.com/pages/upload.php on line 38

De momento esto es lo que tengo:

Código
  1. $list = array('name' => 'mandatory', 'surname' => 'optional');
  2.  
  3. foreach ( $list as $name => $nouse ) {
  4.    if (isset($_POST[$name])) {
  5.        if ( is_array($_POST[$name]) ) {
  6.            $$name = filter_input( INPUT_POST , $name , FILTER_SANITIZE_STRING , FILTER_REQUIRE_ARRAY );
  7.            foreach ($$name as $key => $value) {
  8.                $key = preg_replace('[a-z]', '', $key);
  9.                if ( is_numeric($$name[$key]) ) { // this is line 34
  10.                    $$key = (int) $$name[$key];
  11.                    echo $report[$key] = $key . ' variable (from ' . $name . ' ) created1... <span style="color:green;">OK!</span><br>';
  12.                } else {
  13.                    $$key = $$name[$key];  // this is line 38
  14.                    echo $report[$key] = $key . ' variable (from ' . $name . ' ) created2... <span style="color:green;">OK!</span><br>';
  15.                }
  16.            }
  17.        } else {
  18.            if ( is_numeric($_POST[$name]) ) {
  19.                $$name = filter_input( INPUT_POST , $name , FILTER_SANITIZE_NUMBER_INT );
  20.                echo $report[$name] = $name . ' variable created3... <span style="color:green;">OK!</span><br>';
  21.            } else {
  22.                $$name = filter_input( INPUT_POST , $name , FILTER_SANITIZE_STRING );
  23.                echo $report[$name] = $name . ' variable created4... <span style="color:green;">OK!</span><br>';
  24.            }
  25.        }
  26.    } else {
  27.        if ($list[$name] == 'optional') {
  28.            $$name = 0;
  29.            echo $report[$name] = $name . ' (optional) variable not filled5... <span style="color:green;">OK!</span><br>';
  30.        } else die('Error: You must fill all mandatory fields! (' . $name . ')');
  31.    }
  32. }

El html es de lo más sencillo, los arrays los tengo asi:

Código
  1. <input type="text" name="address_book[name]" />
  2. <input type="text" name="address_book[surname]" />

¿Alguna idea de por qué no funciona?  :-\

Gracias!
40  Programación / PHP / [Solucionado] funcion de clase no imprime datos de la db en: 26 Marzo 2016, 16:15 pm
Hola, me ha pasado algo realmente raro y no consigo encontrar el problema.

Tengo una clase para los usuarios de una web, en esta clase tengo una funcion que devuelve el valor de una de las columnas de la tabla. Al principio todo funcionaba, pero tuve que añadir más columnas a la tabla y cambiar el nombre de un par de ellas, desde entonces hay una de las funciones (una de las dos a las que les tuve que cambiar el nombre) que no devuelve nada, las demás si que funcionan.

He comprobado varias veces por si fuera un error al escribir el nombre, pero todo parece estar en orden.

He grabado un video donde se puede ve claramente el código y el formulario donde se llama dicha función que debería imprimir el contenido de la columna pero nada...
Páginas: 1 2 3 [4] 5 6 7 8 9 10 11 12 13 14 15 16 17 18
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines