U
uncoderbyte
Gamma
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Gracias por su respuesta. De todas maneras no se si sería esto lo que necesito.Lo importante con los tokens es que un atacante no los pueda reutilizar o generar.
Lo primero lo solucionas haciendo uso de tokens que expiran pasado un determinado número de horas o días. Lo segundo añadiendo en los tokens una firma cifrada que solo tú sepas como generarla.
Por suerte existen los JWT (https://jwt.io) como bien dice Hadrien Rivere y que sirven para generar este tipo de tokens. Existen librerías para utilizar JWT en prácticamente cualquier lenguaje de programación que necesites.
Lo leeré 😎Lo principal es que debes colocarle permisos o roles a esos usuarios, cosa que cualquiera que sea usuario pueda generar un token pero verificar si puede o no tener permisos para ejecutar alguna acción.
Lee un poco sobre Gates y Policies: https://laravel.com/docs/8.x/authorization También puedes usar una librería buenisima de spatie.
Es decir, ¿se comprueba que el token que tiene el cliente sea el mismo que generé desde el lado del servidor?supongamos que actualmente tienes:
que devuelve un json
tanto en el server como en el cliente
tu creas luna llave con md5("algoquetusolosabes".parametros_y_valores_uno_tras_otro);
entonces nueva llamada es:
si la llave calza... respondes con la data, en caso contrario no
siempre he tenido la duda de esto de la seguridad de las api's.supongamos que actualmente tienes:
que devuelve un json
tanto en el server como en el cliente
tu creas luna llave con md5("algoquetusolosabes".parametros_y_valores_uno_tras_otro);
entonces nueva llamada es:
si la llave calza... respondes con la data, en caso contrario no
eso es lo que hace JWT y si esta por expirar la vide util del token lo regenerara.Lo leeré 😎
Es decir, ¿se comprueba que el token que tiene el cliente sea el mismo que generé desde el lado del servidor?
Gracias por responder.eso es lo que hace JWT y si esta por expirar la vide util del token lo regenerara.
Busca info de JWT o tambien revisa documentación de OAUTH 2, hay varios paquetes en laravel que hacen eso pero es importante saber como funcionan ya que seguro alguna día tocaras python, js u otro lenguaje y siempre funciona igual.
ambos generan el token onfly, y se comprueba que sean igualesEs decir, ¿se comprueba que el token que tiene el cliente sea el mismo que generé desde el lado del servidor?
Los CORS no me funcionaron, y los tokens no me sirven porque veo que el usuario puede solicitarlos mediante POST, por lot anto sigo sin poder resolver mi problema. 🙁ambos generan el token onfly, y se comprueba que sean iguales
por que no funciono CORS?Los CORS no me funcionaron, y los tokens no me sirven porque veo que el usuario puede solicitarlos mediante POST, por lot anto sigo sin poder resolver mi problema. 🙁
por que depende del navegador cumplirlo y en caso de chrome creo que abriéndolo con unos argumentos se pueden desactivar xdpor que no funciono CORS?
Realmente no se, estuve 1 día entero intentando que funcione y siempre me deja hacer la petición desde mi navegador, aunque puse para únicamente se realiza si proviene desde un dominio determinado.por que no funciono CORS?
De todas maneras tengo en claro que la seguridad en un 100% es CASI imposible lograrlo, por eso no me preocupo tanto. Mas que nada lo estoy haciendo para adquirir conceptos.por que depende del navegador cumplirlo y en caso de chrome creo que abriéndolo con unos argumentos se pueden desactivar xd
En crunchy, si o si requieres de un navegador para entrar a la pagina. en caso de que no sea un browser, te salta la pagina de cloudfare y requieres de javascript para hacer el captcha. (alguien que sabe podría guardarlo y abrir en un browser ligero para hacer el captcha y obtener la pagina al final, pero seria algo complicado xd)
si se pone eso quitarías los noobs, pero los que usan browser automatizados+ argumentos de desactivar cors igualmente podrían entrar al link que te da el token xd
Tal vez haciendo que para cuando al entrar a ese link y te devuelva el token/algo, requieras las cookies/sesion de un usuario logeado en tu pagina.Lo que estoy intentando hacer es que desde una APP web 2 se conecte a una APP web 1 y botenga determinados registros de la BD.
Lo estoy haciendo mediante una API rest.
No entiendo como peude ser tan dificil proteger las rutas jajajaja
<?php
$algo_que_solo_tu_conoces = "123";
$ahora = date("YmdH");
$parametro = // algo que viene de alguna parte que sirve para consultar a la base de datos;
$key_correcto = md5($algo_que_solo_tu_conoces.$parametro.$ahora);
$json_recibido = file_get_contents('https://tuaplicacion.com/get_datos?parametro=$parametro&key=$key_correcto');
// el resto de tu codigo
<?php
$algo_que_solo_tu_conoces = "123";
$ahora = date("YmdH");
$parametro = $_GET['parametro'];
$key = $_GET['key'];
$key_correcto = md5($algo_que_solo_tu_conoces.$parametro.$ahora);
if ($key_correcto!=key)
{ echo "error"; exit; }
$sql = "SELECT * FROM xxx WHERE parametro=$parametro";
$datos = mysql->sql($sql);
return json_encode($datos);
Tal vez haciendo que para cuando al entrar a ese link y te devuelva el token/algo, requieras las cookies/sesion de un usuario logeado en tu pagina.
Eso haría que en el backend del auth token puedas contar cuantas veces esta creando el token/algo un usuario, y ahí ya podrías poner lógica de limitar, no?
¡Muchas gracias por sus explicaciones! 😎No es tan complicado:
asi haces la petición:
<?php $algo_que_solo_tu_conoces = "123"; $ahora = date("YmdH"); $parametro = // algo que viene de alguna parte que sirve para consultar a la base de datos; $key_correcto = md5($algo_que_solo_tu_conoces.$parametro.$ahora); $json_recibido = file_get_contents('https://tuaplicacion.com/get_datos?parametro=$parametro&key=$key_correcto'); // el resto de tu codigo
así la contestas:
<?php $algo_que_solo_tu_conoces = "123"; $ahora = date("YmdH"); $parametro = $_GET['parametro']; $key = $_GET['key']; $key_correcto = md5($algo_que_solo_tu_conoces.$parametro.$ahora); if ($key_correcto!=key) { echo "error"; exit; } $sql = "SELECT * FROM xxx WHERE parametro=$parametro"; $datos = mysql->sql($sql); return json_encode($datos);
Utilizamos cookies y tecnologías similares para los siguientes fines:
¿Aceptas las cookies y estas tecnologías?
Utilizamos cookies y tecnologías similares para los siguientes fines:
¿Aceptas las cookies y estas tecnologías?