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

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


  Mostrar Mensajes
Páginas: 1 ... 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 [27] 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 ... 456
261  Programación / Desarrollo Web / Re: [Pregunta]: ¿Como puedo hacer esto equivalente con javascript? en: 3 Julio 2020, 07:47 am
Mira, hice una función, aver que opinas:

Código
  1. <?php
  2.  
  3. function parse($string){
  4.  
  5.    // Listado de etiquetas y propiedades permitidas
  6.    $availables = array(
  7.        // [etiqueta], [propiedades,]
  8.        'p'     => array('style', 'class', 'id'),
  9.        'a'     => array('href',  'style', 'class', 'id', 'title'),
  10.        'span'  => array('style', 'class'),
  11.        'b'     => array('style', 'class'),
  12.        'i'     => array('style', 'class'),
  13.        's'     => array('style', 'class'),
  14.        'table' => array('style', 'class', 'id', 'rows', 'cols', 'width'),
  15.        'thead' => array(),
  16.        'tbody' => array(),
  17.        'tr'    => array(),
  18.        'td'    => array(),
  19.        'div'   => array('style', 'class', 'id'),
  20.        'ul'    => array('style', 'class', 'id'),
  21.        'li'    => array('style', 'class')
  22.    );
  23.  
  24.    try
  25.    {
  26.        $dom = new DOMDocument();
  27.        @$dom->loadHTML('
  28.            <html>
  29.                <body>
  30.                    <div>'.$string.'</div>
  31.                </body>
  32.            </html>
  33.        ');
  34.        $string = null; // Libera la memoria
  35.    }
  36.    catch(Exception $e)
  37.    {
  38.        // Contenido corrupto, etiquetas sin cerrar,
  39.        // intento de XSS, etc.
  40.        return '';
  41.    }
  42.  
  43.    $id = 0;
  44.    foreach($dom->getElementsByTagNameNS('', '*') as $tag)
  45.    {
  46.        $id++;
  47.        if($id < 4)
  48.        {
  49.            continue;
  50.        }
  51.  
  52.        if(!in_array($tag->nodeName, array_keys($availables)))
  53.        {
  54.            // Etiqueta no permitida
  55.            $escaped = $dom->createTextNode(htmlspecialchars(
  56.                $dom->saveHTML($tag),
  57.                ENT_QUOTES
  58.            ));
  59.            $tag->parentNode->replaceChild($escaped, $tag);
  60.        }
  61.        else
  62.        {
  63.            // Etiqueta permitida
  64.  
  65.            // Busca todos los atributos de la etiqueta
  66.            foreach($tag->attributes as $attribute)
  67.            {
  68.                // Propiedad no permitida?
  69.                if(!in_array(
  70.                    strtolower($attribute->name),
  71.                    $availables[strtolower($tag->nodeName)]
  72.                ))
  73.                {
  74.                    // Elimina el atributo no permitido
  75.                    $tag->removeAttribute($attribute->name);
  76.                }
  77.            }
  78.        }
  79.    }
  80.  
  81.    return trim(substr($dom->saveHTML(
  82.        $dom->getElementsByTagName('body')[0]->childNodes[1]
  83.    ), 5, -6));
  84. }
  85.  
  86. echo parse('
  87.    <ul>
  88.        <li><a onclick="alert(0)" style="color:red;"
  89.               href="http://google.com/">http://google.com/</a></li>
  90.        <li>http://google.com/</li>
  91.        <li><script>alert(0)//http://google.com/</script></li>
  92.        <li><b>http://google.com/</b></li>
  93.    </ul>
  94. ');

Código:
    <ul>
        <li><a style="color:red;" href="http://google.com/">http://google.com/</a></li>
        <li>http://google.com/</li>
        <li>&amp;lt;script&amp;gt;alert(0)//http://google.com/&amp;lt;/script&amp;gt;</li>
        <li><b>http://google.com/</b></li>
    </ul>

Si el usuario ingresa caracteres no permitidos o etiquetas falsas o etiquetas mal formadas o sin cerrar, etc arrojará una excepción y retornará un contendo en blanco, asi que desde el código final dices que si el input está en blanco entonces el usuario debe volver a ingresar el texto.

Claramente esto funciona para habilitar etiquetas HTML y sólo sirve si el navegador ya envía el contenido en este formato, quiere decir que el usuario tendrá que ingresar su mensaje en un editor thml reducido así como wordpress, por ejemplo usando ckeditor. Así ya no necesitarás transformar las urls a enlaces, simplemente haces que el sitio web desde el lado del input ya integre formato html, o si no, también sirve para sanitizar tus conversiones de enlace con expresión regular y habilitar únicamente a los enlaces, pero sería un tanto redundante, en ves de eso es mejor que el input ya venga con los enlaces construidos por el mismo usuario o creados por javascript.

Saludos.
262  Programación / Desarrollo Web / Re: [Pregunta]: ¿Como puedo hacer esto equivalente con javascript? en: 3 Julio 2020, 06:31 am
Citar
¿Y si el enlace va entre paréntesis sin espaciado?

De eso se encarga el RFC y la expresión regular, una url no puede comenzar con parentesis pero si terminar en el, por eso en github, wikipedia, wordpress y demás cuando pones una url en parentesis suelen incluir el cierre de parentesis unicamente y eso es normal.

Citar
Supongo se podria arreglar añadiendo una lista de dominios

Da igual si el dominio está repetido, terminarás pisando uno sobre el otro porque el string que vas a procesar siempre será el mismo y este ya contendrá encierre de etiquetas <a>.

Citar
Pero tendrías el mismo problema

No porque haces una pila y procesas palabra por palabra, nunca vuelves a procesar la misma palabra dos veces.
263  Programación / Desarrollo Web / Re: [Pregunta]: ¿Como puedo hacer esto equivalente con javascript? en: 2 Julio 2020, 00:12 am
#!drvy , intenta convertir esto con tu función en php:

Citar

Citar
Test. <a href="<a href="http://google.com/" target="_blank">http://google.com/</a>" target="_blank"><a href="http://google.com/" target="_blank">http://google.com/</a></a> y <a href="<a href="http://google.com/" target="_blank">http://google.com/</a>" target="_blank"><a href="http://google.com/" target="_blank">http://google.com/</a></a> test.

Tu función es recursiva y no respeta las posiciones de cada match, reemplaza los enlaces según el valor de la expresión encontrada independiente si hay más de una o no.

Hay maneras mas eficientes como por ejemplo la de https://stackoverflow.com/questions/1960461/convert-plain-text-urls-into-html-hyperlinks-in-php

Código
  1. $url = '@(http(s)?)?(://)?(([a-zA-Z])([-\w]+\.)+([^\s\.]+[^\s]*)+[^,.\s])@';
  2. $string = preg_replace($url, '<a href="http$2://$4" target="_blank" title="$0">$0</a>', $string);
  3. echo $string;

Pero en mi caso para estar totalmente seguro y evitar el uso excesivo de memoria al intentar parsear textos muy grandes sobre el motor de expresión regular y evitar vulnerabilidades (porque el ejemplo que puse de stackoverlow tiene xss) lo que haría sería ir en busca de todos los espacios en blanco, ponerle coordenadas en bytes y luego procesar cada texto completo y validar si es un enlace, y si lo es entonces reemplazar, para ello utilizaría un buffer principal donde se vaya acumulando el resultado y eliminando el original, como una pila pero de bytes. No usaría explode() porque eso podría generar arrays demasiado grandes.

De todas maneras el xss se puede evitar si escapas todo el string antes de crear los enlaces con htmlspecialchars y ENT_QUOTES.
264  Sistemas Operativos / GNU/Linux / Re: ubuntu 20.4 todo eliminado. en: 1 Julio 2020, 08:45 am
Citar
cosa que nunca me hizo antes

Que cosa nunca había hecho antes? el mensaje de actualización se ve normal, se ven tus repositorios mas el de google para los paquetes de google, no entiendo bien a que te refieres.

Citar
elimine el programa y todo los repositorios

Todos los repositorios? incluyendo los repositorios de paquetes de ubuntu?

Si has perdido todo es porque talves cuando le diste desinstalar también te desinstaló alguna dependencia rota y terminaste eliminando gnome o algo por el estilo. Igual es extraño porque en ese caso te hubieras quedado sin interfaz gráfica.

Has intentado acceder a tus documentos desde el terminal?, cual es el estado actual de tu sistema? se borraron las carpetas del home? solo los archivos?, no puedes verlo desde el gestor de archivos o tampoco desde el terminal?, que fue lo que borraste exactamente?

Puedes compartir el contenido del archivo /home/usuario/.bash_history para saber exactamente que fue lo que ejecutaste o eliminaste?, sólo las líneas que incluyen desde la instalación hasta la desinstalación. Con eso sabremos mejor que fue lo que pasó.

Saludos.
265  Foros Generales / Sugerencias y dudas sobre el Foro / Re: Grupo OFICIAL de Telegram Elhacker.NET en: 9 Mayo 2020, 04:33 am
Hola, hace unos dias atrás traspasé la propiedad del grupo a el-brujo, no se si habrá afectado en algo o no.

Saludos.
266  Programación / Programación C/C++ / Re: Problema al usar while en: 23 Abril 2020, 22:13 pm
Citar
if(opcion == 'y') {}

No puedes hacer una comparación de un char de 1 dimension con un std::string, y cómo sabrías si el valor contiene otra letra y deba ser procesado para multiplicar o no?.
267  Programación / Programación C/C++ / Re: Problema al usar while en: 23 Abril 2020, 21:45 pm
Porque 0 para factorización si es un número válido, solo te quisiste ahorrar la validación numérica.

saludos.
268  Programación / Programación C/C++ / Re: Problema al usar while en: 23 Abril 2020, 11:00 am
Citar
- El do y el casteo por el que preguntas static_cast<int>('n'); son innecesarios en este programa.

Y como te aseguras que el usuario no ha introducido otra cosa que no sea un valor numérico? y como sumas el total de todas las operaciones del loop?

Citar
No tienes ningún tipo de pausa en el programa. Puede que tu IDE las integre en desarrollo pero en varios sistemas si ejecutas el binario compilado, este no tiene pausa y se cierra la consola sin poder ver el resultado.

No veo la necesidad de hacer una pausa, vamos, es una aplicación de terminal, no vienes desde windows y le haces doble click al ejecutable, se supone que lo estás llamando desde el interprete de comandos, a demás.

Citar
char letra no te hace falta

Y como finaliza la instrucción del input del while?

Lo que te hace falta FranAI es transformar tu input a integer siempre y cuando este sea un valor numérico, en caso contrario no podrás transformar "n" a entero y te dará un error de memoria y la validación de contenido de un valor entero de un std string lo debes hacer recorriendo cada caracter, yo transformé cada uno al valor decimal y comrpobé si era el valor de un dígito. También entendí que la suma de los loops es para sumar el resultado de cada operación dentro del loop, asi que lo modifiqué poniendo las variables dentro del mismo loop para evitar globalizar las variables y tener basura en la memoria cuando liberes el proceso, las variables temporales las puse dentro del mismo while para que se autodestruyan en cada iteración. A demás, las palabras no se consideran como operaciones matemáticas asi que el contador lo puse justo después de la validación. Mira, algo así:

Código:
#include <iostream>
#include <string>

int main()
{
    std::string input;
    int totals  = 0;
    int nInputs = 0;

    while(1)
    {
        std::cout << "Ingrese un numero entero (o 'n' para finalizar): "; // no flush
        std::cin >> input;
        
        if(input.compare("n") == 0)
        {
            break;
        }

        bool isNumeric = true;
        for(int i = 0; i <= (input.length() - 1); i++)
        {
            if(((int)input[i] < 48) || ((int)input[i] > 57)) // decimal
            {
                isNumeric = false;
                std::cout << "El valor no es numérico. Intentalo nuevamente." << std::endl;
                break;
            }
        }

        if(!isNumeric)
        {
            continue;
        }

        nInputs++;

        int num   = std::stoi(input);
        int total = num * num - num;
        totals += total;

        std::cout << num <<  " * " << num << " - " << num <<  " = " << total << std::endl;
    }

    std::cout << nInputs << " numeros ha ingresado el usuario." << std::endl;
    std::cout << "Suma de resultados calculados: " << totals << std::endl;

    return 0;
}

Para compilar y ejecutar:

Código:
whk@machine:~/Escritorio$ g++ test.cpp -o test
whk@machine:~/Escritorio$ file test
test: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/l, for GNU/Linux 3.2.0, not stripped
whk@machine:~/Escritorio$ ./test
Ingrese un numero entero (o 'n' para finalizar): 1
1 * 1 - 1 = 0
Ingrese un numero entero (o 'n' para finalizar): 5
5 * 5 - 5 = 20
Ingrese un numero entero (o 'n' para finalizar): abc
El valor no es numérico. Intentalo nuevamente.
Ingrese un numero entero (o 'n' para finalizar): 500
500 * 500 - 500 = 249500
Ingrese un numero entero (o 'n' para finalizar): n
4 numeros ha ingresado el usuario.
Suma de resultados calculados: 249520

También podrías simplificar "n*n-n" como "n*(n-1)", factorización de números semiprimos ;)

Espero te sirva. Saludos.
269  Programación / Bases de Datos / Re: Ayuda mostrar filas se relacion muchos a muchos en: 23 Abril 2020, 10:03 am
Citar
En cambio se debia primero crear un user de bd al que se le revoquen todos los permisos de select, insert, update y solo pueda manipular las tablas a traves de proc almacenados, de esta maneracsolo podra ver solo los campo que le permita el proc almacenado.
Como dije estaba tuve que rehacer el trabajo que al prinxipio mezclaba sql+vb, esta vez uso los procs para el crud pero tambien los tendre que usar para validar usuarios, practicamente todo el trabajo lo tengo hecho en procs almacenados.

como te dije antes, alejate de esos sitios webs. El que maneja la integridad de acceso debe ser la capa de datos desde la aplicación, no la base de datos. Si un día necesitas dar acceso a una aplicación que se va a conectar a la misma base de datos que harás? tendrás dos grandes problemas, primeramente tendrías que tener dos permisos distintos, uno para leer y otro para actualizar y vas a tener que usar usuarios distintos con procedimientos distintos, lo segundo es que tendrías que estarle haciendo cambios directamente a la base de datos sin pasar por el proceso de paso a producción de la aplicación porque no tendrás los cambios por escrito en código ni habrá una manera de devolver el estado anterior de la db si algo sale mal. He trabajado muchos años en muchas empresas que han utilizado procedimientos almacenados en .net y tienen los peores dolores de cabeza.

Se ordenado y haz las cosas bien desde el comienzo.

Citar
La verdad no se cuales lenguajds son los mas requeridos por las empresas

Actualmente el mas requerido a nivel mundial en el mundo laboral es Java. Dale un vistazo a esto:

https://computerhoy.com/noticias/tecnologia/estos-son-lenguajes-programacion-demandados-empresas-423369
http://www.cleformacion.com/-/los-10-lenguajes-de-programacion-mas-demandados-en-2018
https://www.campusmvp.es/recursos/post/tendencias-en-lenguajes-de-programacion-2019-la-encuesta-anual-de-stack-overflow.aspx

Como verás, a nivel laboral, visual basic no está en ningún top.

Saludos.
270  Foros Generales / Sugerencias y dudas sobre el Foro / Re: GET /index.php?=VAYAMIERDADELBRUJO en: 21 Abril 2020, 23:22 pm
Debe ser algún resentido que cree que botando sitios va a cambiar o demostrar algo. En unos días más el foro continuará online como siempre y probablemente todos terminen olvidando el ataque.

Mientras tanto que dure el ddos, vamos a jugar unas partidas de War Robots por Steam :D y volvemos en un rato, mientras que quema sus direcciones ips.
Páginas: 1 ... 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 [27] 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 ... 456
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines