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

 

 


Tema destacado: Estamos en la red social de Mastodon


  Mostrar Mensajes
Páginas: 1 ... 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [19] 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 ... 75
181  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.
182  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!
183  Programación / PHP / Re: mysqli rollback todos los insert si uno falla en: 12 Abril 2016, 02:35 am
Ah, al fin algo nuevo. Si que son muy utiles esos blockes. Gracias, dejo como lo he hecho:

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. try{
  8.  
  9.    if ($stmt_uno = $mysqli->prepare('INSERT INTO tabla_principal (uno, dos, tres) VALUES (?, ?, ?)')) {
  10.        $stmt_uno->bind_param('sss', $uno, $dos, $tres);
  11.  
  12.        if (!$stmt->execute()) {
  13.            throw new Exception($stmt->error);
  14.        }
  15.  
  16.        $id = (int) $mysqli->insert_id;
  17.  
  18.        if ($stmt_dos = $mysqli->prepare('INSERT INTO sub_tabla (principal_id, cuatro) VALUES (?, ?)')) {
  19.            $stmt_dos->bind_param('is', $id, $cuatro);
  20.            if (!$stmt->execute()) {
  21.                throw new Exception($stmt->error);
  22.            }
  23.        }
  24.  
  25.        if ($stmt_tres = $mysqli->prepare('INSERT INTO sub_tabla_dos (principal_id, cinco) VALUES (?, ?)')) {
  26.            $stmt_tres->bind_param('is', $id, $cinco);
  27.            if (!$stmt->execute()) {
  28.                throw new Exception($stmt->error);
  29.            }
  30.        }
  31.    }
  32.  
  33.    if ($mysqli->commit()) {
  34.        $redirect = TRUE;
  35.    } else {
  36.        throw new Exception('Transaction commit failed. Property ID: ' . $id);
  37.    }
  38.  
  39. } catch (Exception $e) {
  40.    try {
  41.        $mysqli->rollback();
  42.        $err_msg = $e->getMessage();
  43.    } catch (Exception $f) {
  44.        $err_msg = $f->getMessage();
  45.    }
  46.    die($usr_msg);
  47. }
  48.  
  49. // es importante volver a activar el autocommit
  50. $mysqli->autocommit(TRUE);

Me costó un buen rato darme cuenta de por qué no se guardaba nada en la db  :-\
184  Programación / PHP / Re: Tabla con ficheros para descargar en: 12 Abril 2016, 02:24 am
No, tienen que ir en archivos distintos. El primero código es el script que coge los datos de la base de datos y crea las filas de la tabla. El segundo código es el get donde el ajax hace la petición de los datos a mostrar en la tabla.

El tercer código inicializa el plugin datatables en la tabla con id example, es javascript. Tienes que crear el html de la tabla, entra en la web de datatables y en los ejemplos tienes el código html. También tienes que descargarte el plugin (js y css) o puedes usar más facil el link del CDN así no tienes que descargarte nada.

Ahora bien, para montarlo todo, el primer código es una función; deberías de tener un archivo que recoja las funciones que usas en tu web, puedes crear una clase functions así llamas facilmente tus funciones desde cualquier parte de tu web. El segundo código va en un archivo a parte, crea un archivo llamado get.php y ahí vás poniendo los distintos get que necesites:

Código
  1. $op = isset( $_GET['op'] ) ? (int) $_GET['op'] : 0;
  2.  
  3. if ($op === 1) {
  4.    // primer get
  5. }
  6.  
  7. if ($op === 2) {
  8.    // segundo get
  9. }
  10.  
  11. // etc...

Basicamente lo que hacen los get es llamar a una función que devuelve datos, por ejemplo si necesitas llenar una lista de paises, ciudades, etc pues creas la funcion y haces un get con ajax jquery a la url (/get.php?op=1 o 2 o 3...) y así llenas las listas de manera dinamica, en este caso la tabla que necesitas.
185  Programación / PHP / Re: Tabla con ficheros para descargar en: 10 Abril 2016, 22:34 pm
¿Tienes dudas con todo en general? ¿O solo es para crear el link al archivo? Especifica mejor lo que quieres.

Para tablas lo mejor que hay ahora mismo es el plugin de jquery datatables. Creas una función que coja las columnas y con ajax recoges los datos. Datatables se encarga de todo lo demás.

Ahora bien, lo del link, no sé que dudas tienes respecto a esto pero lo normal es subir los archivos a un dominio o subdominio de tu web que sea estatico (con php, perl, etc desactivado) y de ahí se descargan, el link sería algo así: http://static.tuweb.com/archivos/archivo1.pdf

En la base de datos se suele subir el link del archivo, no el archivo en sí (que se puede).

En el script php, imprimes el link dentro del href.

Como la documentación de datatables es un poco liosa (muchas cosas innecesarias) te dejo como lo haría yo:

Código
  1. public function get_files_table() {
  2.    $mysqli = $this->aet->getAetSql();
  3.  
  4.    $query = 'SELECT * FROM files';
  5.  
  6.    if ($stmt = $mysqli->prepare($query)) {
  7.        $stmt->execute();
  8.  
  9.        $stmt->bind_result($idreg, $fecha, $nombre_corto, $nombre_largo, $description, $link);
  10.  
  11.        $data = [];
  12.        while ($stmt->fetch()) {
  13.            $nestedData                 = [];
  14.            $nestedData['idreg']        = $idreg;
  15.            $nestedData['fecha']        = $fecha;
  16.            $nestedData['nombre_corto'] = $nombre_corto;
  17.            $nestedData['nombre_largo'] = $nombre_largo;
  18.            $nestedData['description']  = $description;
  19.            $nestedData['link']         = '<a href="' . $link . '">Descargar</a>';
  20.            $data[]                     = $nestedData;
  21.        }
  22.    }
  23.  
  24.    return $data;
  25. }

Ahora el get para el ajax:

Código
  1. $op = isset( $_GET['op'] ) ? (int) $_GET['op'] : 0;
  2.  
  3. if ($op === 1) {
  4.    $result = $functions->get_prop_table();
  5.  
  6.    header('Content-type: text/json');
  7.    header('Content-type: application/json');
  8.    echo json_encode($result);
  9. }

Si necesitas hacer más cosas mediante ajax, puedes crear más ifs con distintos números para cada función que tengas.

Código
  1. $('#example').DataTable( {
  2.    processing: true,
  3.    lengthChange: false,
  4.    ajax: {
  5.        url: '/get',  // la url donde tienes el archivo que gestiona los get
  6.        dataSrc: '',
  7.        data: function(d) {
  8.            d.op = 1;  // la opción, en este caso 1
  9.        }
  10.    },
  11.    language: {
  12.        "url": "//cdn.datatables.net/plug-ins/1.10.11/i18n/Spanish.json"
  13.    },
  14.    columns: [
  15.        { data: 'idreg' },
  16.        { data: 'fecha' },
  17.        { data: 'nombre_corto' },
  18.        { data: 'nombre_largo' },
  19.        { data: 'description' },
  20.        { data: 'link' }
  21.    ]
  22. });
186  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.
187  Programación / PHP / Re: sistema de visitas (contador) en: 8 Abril 2016, 22:38 pm
Sé perfectamente como funciona PHP y sus posibilidades. En este caso hay que crear una función que añada +1 y llamar esa función al principio de la página en cuestión. Eso está clarisimo.

Me referia a las condiciones que deben cumplirse para que se produzca ese +1. Ya que si no se ponen condiciones y alguien se dedica a hacer click al contenido que él mismo ha publicado, las visitas se disparan cuando en realidad nadie más que él ha visto dicho contenido.

Antes mencioné, como ejemplo, el contador de visitas de youtube. No sé como funciona, pero es algo así lo que estoy buscando. Supongo que las visitas únicas no existen, ya que son demasiados factores a tener en cuenta.

Seguramente, lo que se usa, es la sesión actual (la activa) para comprobar esto y una vez caducada la visita vuelve a contar.
188  Programación / Desarrollo Web / Re: Duda sobre redireccionamientos en: 8 Abril 2016, 21:18 pm
Lo que quieres es que todas lás secciones de una página web "B" redireccionen a una página web "C" con la excepción de una de las secciones que está reservada para que se acceda desde una página web "A", ¿no?

Código:
Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteRule ^ruta/a/acceder/? archivo.htm [L,NC]

RewriteCond %{HTTP_HOST} ^(www\.)?B\.com  [NC]
RewriteRule ^ http://C.com%{REQUEST_URI} [NE,R=301,L]
(De .htaccess: Redirect all pages except one)

Donde dice "ruta/a/acceder/" tienes que poner la ruta de la sección de tú página web "B". Abajo en RewriteCond va el nombre de tu página web "B" y en RewriteRule el nombre de tu página web "C".

Edito: Pongo link del código.
189  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!
190  Programación / Bases de Datos / Re: mysql no usa la variable por defecto cuando no se inserta nada en: 6 Abril 2016, 16:15 pm
Entonces la solución es o bien usar un ternario al declarar la variable:

Código
  1. $checkbox1 = isset($_POST['checkbox1']) && $_POST['checkbox1'] != '' ? filter_input(INPUT_POST, 'checkbox1', FILTER_SANITIZE_STRING) : 0;

O bien usando IFNULL() para todos:

Código
  1. VALUES (IFNULL(?, DEFAULT(0)), IFNULL(?, DEFAULT(0)), IFNULL(?, DEFAULT(0)), IFNULL(?, DEFAULT(0)), IFNULL(?, DEFAULT(0)))

No se cual usar :P
Páginas: 1 ... 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [19] 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 ... 75
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines