Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Leguim

#331
No funciono creo que algo estoy poniendo mal porque los saltos de lineas se mantienen

"Texto







Texto" <= (7) saltos de lineas seguidos que están vacíos.

"Texto



Texto" <= Transforma en (3) saltos de lineas seguidos.


Código (php) [Seleccionar]

<?php
$string 
'• Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod.'."\r\n\n\n\n\n\n\n\n\n".'• Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod.'."\r\n".'• Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod.';

echo 
nl2br($string);
?>

<br><br><br><br>
<?php
$salida 
preg_replace('/\ {4,}/m'"\n"$string);
echo 
nl2br($salida);
?>



Los saltos de lineas se mantienen ¿qué estoy haciendo mal?
#332
Buenas noches,

¿Como puedo hacer que si en una cadena hay 4 o más (>= 4) lineas en blanco "\n" seguidas estas se transformen en 3 con php

sería algo así:

"Hola,




Acá de nuevo, arriba hay 4 lineas en blanco"


"Hola de nuevo,








Acá de nuevo, arriba hay 8 lineas en blanco"

el programa debería transformarlo en esto =>
"Hola de nuevo,



Arriba hay ahora 3 lineas en blanco"
#333
Sistema anti ataques CSRF


Con este pequeño sistema se espera que los ataques CSRF ya no nos afecten, este es el segundo aporte que hago. El primero era un contador de llaves donde se podía ingresar un código y el programa iba a devolver la cantidad de llaves abiertas y cerradas.

Con esto quiero decir que este es mi primer aporte "avanzado" para mi así que por eso muy posiblemente existan fallos o áreas donde el código pueda ser mejorado.

El sistema lo que hace es crear tokens de seguridad de clave única cifrada, yo lo uso para evitar ataques en las paginas donde existan formularios, donde se use $_GET como por ejemplo un perfil (profile.php?id_user=x) y también lo uso en ficheros AJAX (realmente no estoy seguro si es necesario pero quería que en todas las partes de mi aplicación web donde se ejecuten funciones importantes exista este control de seguridad)

Con este código espero que me lluevan criticas, sugerencias para que podamos mejorarlo entre todos.

En principio creo 6 funciones, creo que esta de más decir que uso PHP para esto pero quería aclararlo.

La primera función servirá para crear un código de 22 caracteres unos 20 números + 2 letras en mayúsculas.
Código (php) [Seleccionar]

function Create_Code()
{
$year_code = date('Y');
$month_code = date('m');
$day_code = date('d');
$hour_code = date('H');
$minute_code = date('i');
$second_code = date('s');

$random_code_A = rand(100000, 999999);
$random_code_B = chr(rand(ord('A'), ord('Z')));
$random_code_C = chr(rand(ord('A'), ord('Z')));

$result = ($random_code_A).($year_code).($month_code).($day_code).($hour_code).($minute_code).($second_code).($random_code_B).($random_code_C);

return $result;
}


La segunda función servirá para crear un token determinado para cada pagina que exista en nuestra aplicación.
Código (php) [Seleccionar]

function Create_Token($page)
{
if(is_string($page))
{
if(!isset($_SESSION['token_'.($page)]))
{
$token_csrf = Create_Code(); // Creamos un codigo unico
$token_csrf = Hash_Data($token_csrf); // ciframos el codigo lo que nos va a dar una cadena de 60 caracteres
$_SESSION['token_'.($page)] = $token_csrf; // se crea una session con el token generado
}
}
}


La funciòn hash_data (me había olvidado de ponerla, gracias por el aviso!)
Código (php) [Seleccionar]

function Hash_Data($data) // El tipo de cifrado es general, con esto quiero decir que uso esta función para cifrar contraseñas, códigos de activación de un email, etcétera, ustedes pueden usar el que quieran pero en mi aplicación como norma general uso este.
{
$result = 'Error';

if(is_string($data))
{
$result = password_hash($data, PASSWORD_BCRYPT);
}

return $result;
}


La tercera función servirá para crear una lista de tokens (acá van a tener que poner todas las paginas que van a usar tokens, donde usen formularios, peticiones $_get, o ajax)
Código (php) [Seleccionar]

function Create_Tokens()
{
// Ajax
Create_Token('ajax'); // acá recomiendo que creen un solo token para validar ficheros ajax

// Pages ($_POST or $_GET)
Create_Token('login'); // este token pertenece a login.php donde estará el formulario de acceso
}


La cuarta función servirá para validar un token determinado.
Código (php) [Seleccionar]

function Validate_Token($page, $value)
{
$result = false;

if(is_string($page) && is_string($value))
{
if(isset($_SESSION['token_'.($page)]))
{
if(!empty($_SESSION['token_'.($page)]) && $_SESSION['token_'.($page)] === $value)
{
$result = true;
}
}
}

   return $result;
}


Ahora vamos a ponerlo en práctica, por supuesto todas las funciones de arriba deberían ponerlas en una libreria que ustedes pueden crear e incluirla en todas sus paginas php incluyendo "Create_Tokens();" pero para este ejemplo vamos a dejarlo acá.
Código (html) [Seleccionar]

<!-- login.php -->
<?php
Create_Tokens
();
?>


<form method="post">
    <input type="text" name="el_texto"></input>
    <input type="hidden" name="token_csrf" value="<?php echo($_SESSION['token_login']); ?>"> // Acá va a ir su token, fijense que le puse "token_login" esto tiene que ir personalizado dependiendo en que paginas lo usen
     <button type="submit" name="el_submit"></button>
</form>

<?php
if(isset($_POST['el_submit'])) // cuando se envia el formulario
{
     if(isset(
$_POST['token_csrf']) && Validate_Token('login'$_POST['token_csrf']))
     {
        echo 
"mandaste ".$_POST['el_texto'];
     }
     else
     {
          echo 
"Se detecto un ataque CSRF";
     }
}
?>



Bueno ahora vamos a aplicar esto a una pagina que use $_GET como por ejemplo un perfil.
Código (html) [Seleccionar]

<!-- profile.php -->
<?php
if(isset($_GET['id_user']) && isset($_GET['token_csrf']))
{
    
$_GET['token_csrf'] = urldecode($_GET['token_csrf']);

    if(
Validate_Token('token_profile'$_GET['token_csrf']))
    {
        [
Ejecución]
    }
    else  
    {
        [
Interrumpimosredirigimosetcétera// ya que no es valido el token
    
}
}
else
{
     [
Interrumpimosredirigimosetcétera]
}
?>



Cuando vayamos a redirigir a el usuario a una pagina donde se use $_get debe de ser así...
Código (javascript) [Seleccionar]

window.location.href = 'profile.php?id_user=<?php echo urlencode($id); ?>&token_csrf=<?php echo urlencode($_SESSION['token_profile']); ?>';


En ajax sería así:
Código (php) [Seleccionar]

// ajax/fichero.php
if(Validate_Token('token_ajax', $_POST['token_csrf'])) // $_POST['token_csrf'] depende de si en ajax ustedes usan GET o en este caso POST
{
    [Ejecución]
}
else
{
    [Interrupción]
}




Espero que les guste y si lo quieren usar que me comenté si les gusto, escucho criticas como ya dije y entre todos poder ir mejorando este sistema. Gracias!
#334
Buenos días,

hace unos días había publicado un tema donde preguntaba sobre un sistema de ver más, la idea es que se va a obtener una cadena donde se va a hacer varias preguntas y en base a estas se ejecutara un resultado. Hice este algoritmo pero no se como puedo seguirlo, estoy en un bloqueo y no consigo entender.

Lo que espero que haga el "programa" es que a partir de una cadena sobre si esta es muy grande (mb_strlen($cadena) >= 250) esta se acorte mostrando las primeras 250 letras y al final concatenar "..." y un botón "Ver más" hasta acá no hay ningun problema es más el programa hasta acá funciona pero hay "huecos" que no puedo cubrir, la verdad si que estoy bloqueado.

Digamos que en la cadena hay saltos de lineas este ya es otro panorama diferente porque la cadena puede ser

"a
b
c
d
e
.. así hasta 249 letras
" si ustedes se fijan si yo aplico la solución que ya hice no va a hacer nada ya que es menor a 250 caracteres entonces lo va a mostrar completo pero va a ser muy alto, para que puedan entender se puede tomar como ejemplo alguna red social como facebook que al pasar x cantidad de caracteres una publicación esta se va a "minimizar" pero no se como puedo cubrir los saltos de líneas.

Hice este algoritmo pero no puedo entender,

Espero que se entienda porque la pagina desde donde hice el algoritmo es una verg# y le pusieron como 500 marcas de agua los crotos estos xD

cualquier cosa me dicen y lo hago desde otro lado



Muchas gracias, no hace falta que manden código ni nada de eso no quiero que me hagan el programa ustedes nada más que me puedan dar una mano con esta parte final en cuanto a lógica.
#335
¿Por qué existe gente que usa el "theme" color blanco para programar? ¿Que onda no les duele los ojos o que?
#336
Hola!

Capaz no es lo que buscas pero para "personalizar" de mostrar un error cuando se envía un campo vacío ya sea un input, textarea, select, etcétera lo que hago es usar código de javascript y jQuery de la siguiente manera.

Código (html) [Seleccionar]

<form id="form_index" method="post">
       <input type="email" name="input_email>"
</form>


Código (javascript) [Seleccionar]

$(document).ready(function()
{
      $('#form_index').submit(function(e)
      {
     if(form_index.input_email.value == 0) // se accede a el formulario por medio de form_index la id y luego a el elemento ya sea un select, en este caso un input que tiene de name="" input_email
     {
     e.preventDefault(); // sirve para no enviar el formulario

                     form_index.input_email.focus(); // hace el foco en el input que esta vacío
                     form_index.input_email.style.border = '1px solid red'; // Marked

                    alert('no seas vago y completa los campos!');
     }
       });
});
#337
Cita de: MinusFour en  7 Diciembre 2019, 21:26 PM
Puedes editar el título de tu tema anterior hasta donde yo tengo entendido. A menos que yo tenga permisos extras que no me haya dado cuenta o este foro no lo tenga permitido. Si hablamos de SEO, el verdadero problema es que en tu otro tema has puesto una imagen en lugar del texto del error... (que también deberías poder editar)...

Y bueno, si es Google Recaptcha el que pone la cookie pues no te corresponde a ti hacer cambios a la cookie. En primer lugar no creo que puedas evitar que ese error se despliegue por lo menos una vez. Eventualmente creo que la idea es que la cookie ni se establezca, así que les toca a los de Google actualizar.

Cuando vos editas un tema el tema no va a subir se va a quedar donde estaba lo cual va a ser lo mismo que nada, queda muerto ahí abajo...

Si vamos al caso seguramente me vayas a decir "pero por qué no lo revivis con un mensaje nuevo?" siendo ese el caso es lo mismo no es para tanto.
#338
Cita de: MinusFour en  7 Diciembre 2019, 20:38 PM
No hay necesidad de volver a hacer otro tema relacionado a esta pregunta, tu tienes un tema aquí:

https://foro.elhacker.net/desarrollo_web/pregunta_iquestque_significa_este_warning-t500666.0.html

Si realmente es google el que está poniendo una Cokie que no tiene SameSite puesto correctamente entonces le toca a Google arreglar su script para que ponga la cookie correctamente.

Pero en tu último tema no decía que era Google así que no creo que sea eso. Usa las herramientas de desarrollo para ver que cookies tienes y cuales son las que otros scripts están creando que no las ponen correctamente.

En realidad si uno se fija en un tema estoy preguntando "¿Qué significa este warning?" (no sabia de donde venia el problema) y este se llama "A cookie associated with a cross site resources" Google Recaptcha. (es un tema más puntual donde ya se de donde viene el problema)

Estoy seguro que es recaptcha porque ya no estoy usando cookies y la única "librería o extensión" por así decir es recaptcha, aparte las paginas/ficheros donde aparece este warning son esas paginas donde se usa recaptcha.

Justo se me ocurrió y es que todavía es mucho mejor este tema porque una persona que tenga un problema como este no va a buscar en google "¿Qué significa este warning?" va a buscar el nombre del error y si el foro tiene un buen posicionamiento (SEO) el resultado va a aparecer más arriba xD

Igualmente voy a revisar lo que decis pero lo dudo ya que no uso más cookies (al menos por el momento)

Gracias!
#339
Cita de: peib0l en  7 Diciembre 2019, 20:26 PM
Ese header lo tienes que poner en todas las peticiones (en las que correspondan) lo que creo que te da problemas es hacer las peticiones de un dominio local o sin https

Puede ser lo primero, ya que estoy en la fase de desarrollo todavía... ¿Lo dejo así? Total cuando lo suba a producción capaz desaparezca no?
#340
Buenos días,

ya pude descubrir de donde viene este warning "A cookie associated with a cross site resources at ..."

El warning aparece en las paginas donde uso recaptcha de google es la v2.

Buscando por ahí encontré que poniendo este fragmento se puede "solucionar"

Código (javascript) [Seleccionar]

response.setHeader('Set-Cookie', 'HttpOnly;Secure;SameSite=Strict');


Tengo 2 problemas con esto,

1. No entiendo que es lo que hace este código, solamente que supuestamente ese warning ya no va a joder/molestar.
2. Intente poniendo en un <script> (javascript) ya que si no estoy equivocado eso es js... pero me da un error "reference error response is not defined" lógicamente me dice que la variable response no existe lo cual es correcto pero como tampoco se donde meterlo ni para que sirve por eso, una vez que sepa para que sirve y donde meterlo voy a saber como definir la variable "response"

Con que me respondan por lo menos 1 me sirve muchisimo, Gracias!  ;-)