Caducidad de enlace URL. Cifrar parámetros de la URL.

848 views
Skip to first unread message

Carlos Admirador

unread,
Nov 4, 2017, 12:57:32 PM11/4/17
to AltNet-Hispano
Hola gente!!!
Tenemos una app que va enviar SMS con enlaces en el texto.

Ahí se plantean varios retos:

- Acortador de Urls. Utilizamos API Shorten de Google. Tenéis alguna experiencia real world con ello? Por ejemplo, no funciona con direcciiones con IP tipo http://10.666.666.666:9000/Page.aspx.

- Caducidad del enlace, es decir, si pasan más de 4 días por ejemplo, al pulsar el enlace no tendría que ser válido.

- Cifrar parámetros de la url

Tendríamos una url tipo: 



Alguna idea para la caducidad de enlace URL y cifrado de parámetros ?

Saludos gente!!

Vicenç Garcia

unread,
Nov 4, 2017, 2:50:04 PM11/4/17
to altnet-...@googlegroups.com
Buenas, 

hicimos algo parecido en un anterior proyecto. Si no recuerdo mal, codificábamos todo esto en base64 y eso es lo que iba en el query string. Otra opción es pasar un identificador y guardar la info de la caducidad en la base de datos.

Salut!

--
Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a altnet-hispano+unsubscribe@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a altnet-hispano@googlegroups.com.
Visita este grupo en https://groups.google.com/group/altnet-hispano.
Para acceder a más opciones, visita https://groups.google.com/d/optout.



--

Juan Carlos Quijano Abad

unread,
Nov 5, 2017, 2:32:19 AM11/5/17
to altnet-hispano
No te valdría un token normal y corriente como los de OAuth? O el de las firmas compartidas de Azure? No solo tienen TTL sino q incluyen políticas de acceso.

El 4 nov. 2017 7:50 p. m., "Vicenç Garcia" <vincen...@gmail.com> escribió:
Buenas, 

hicimos algo parecido en un anterior proyecto. Si no recuerdo mal, codificábamos todo esto en base64 y eso es lo que iba en el query string. Otra opción es pasar un identificador y guardar la info de la caducidad en la base de datos.

Salut!
2017-11-04 16:57 GMT+00:00 Carlos Admirador <admirado...@gmail.com>:
Hola gente!!!
Tenemos una app que va enviar SMS con enlaces en el texto.

Ahí se plantean varios retos:

- Acortador de Urls. Utilizamos API Shorten de Google. Tenéis alguna experiencia real world con ello? Por ejemplo, no funciona con direcciiones con IP tipo http://10.666.666.666:9000/Page.aspx.

- Caducidad del enlace, es decir, si pasan más de 4 días por ejemplo, al pulsar el enlace no tendría que ser válido.

- Cifrar parámetros de la url

Tendríamos una url tipo: 



Alguna idea para la caducidad de enlace URL y cifrado de parámetros ?

Saludos gente!!

--
Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a altnet-hispano+unsubscribe@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a altnet-...@googlegroups.com.

Visita este grupo en https://groups.google.com/group/altnet-hispano.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Carlos Admirador

unread,
Nov 5, 2017, 4:48:07 AM11/5/17
to AltNet-Hispano
Aquí en MSDN Magazine comentaban utilizar un Hash, mejor SHA256, pues MD5 es inseguro.

Base64 es una codificación, puede modificarse. Puede haber problemas en el URL encoded?

https://msdn.microsoft.com/en-us/magazine/dd458793

"As an implementation detail, note that the output of the HMACSHA256.ComputeHash method is a byte array, but you will need to convert this to a URL-legal string because you will be writing it into the outgoing URL. This conversion is a little trickier than it sounds. Base64 is commonly used to convert arbitrary binary data into string text, but base64 contains characters like the equals sign (=) and the slash (/) that will cause parsing problems for ASP.NET even if they are URL encoded"


Lo que comentas de OAuth, valdría un generarToken y un validarToken, algún ejemplo?

De firmas compartidas de Azure me suena a chino, imagino que ya habría que tener una suscripción a Azure, implica más infraestructura. 

Más simple, generar el hash y validar el hash, IMHO.

El domingo, 5 de noviembre de 2017, 8:32:19 (UTC+1), Juan Quijano escribió:
No te valdría un token normal y corriente como los de OAuth? O el de las firmas compartidas de Azure? No solo tienen TTL sino q incluyen políticas de acceso.
El 4 nov. 2017 7:50 p. m., "Vicenç Garcia" <vincen...@gmail.com> escribió:
Buenas, 

hicimos algo parecido en un anterior proyecto. Si no recuerdo mal, codificábamos todo esto en base64 y eso es lo que iba en el query string. Otra opción es pasar un identificador y guardar la info de la caducidad en la base de datos.

Salut!
2017-11-04 16:57 GMT+00:00 Carlos Admirador <admirado...@gmail.com>:
Hola gente!!!
Tenemos una app que va enviar SMS con enlaces en el texto.

Ahí se plantean varios retos:

- Acortador de Urls. Utilizamos API Shorten de Google. Tenéis alguna experiencia real world con ello? Por ejemplo, no funciona con direcciiones con IP tipo http://10.666.666.666:9000/Page.aspx.

- Caducidad del enlace, es decir, si pasan más de 4 días por ejemplo, al pulsar el enlace no tendría que ser válido.

- Cifrar parámetros de la url

Tendríamos una url tipo: 



Alguna idea para la caducidad de enlace URL y cifrado de parámetros ?

Saludos gente!!

--
Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a altnet-hispan...@googlegroups.com.

Para publicar en este grupo, envía un correo electrónico a altnet-...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/altnet-hispano.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a altnet-hispan...@googlegroups.com.

Leonardo Micheloni

unread,
Nov 5, 2017, 4:48:20 AM11/5/17
to altnet-hispano
Como dicen Vicenç y Juan, hay varias formas de hacerlo, si lo que necesitás es que tu URL caduque podés controlar eso desde el lado del servidor (con un simple identificador y la fecha de caducidad en la base datos) o sino que no cambie pero identificás con un token que tiene su vencimiento.
 Con respecto a enviar datos encriptados en la URL, me pregunto cuál es la necesidad de hacer eso? 
--
@leomicheloni Microsoft MVP

Carlos Admirador

unread,
Nov 5, 2017, 4:52:25 AM11/5/17
to AltNet-Hispano
Por un lado la caducidad.

Por otro, hay más parámetros, como un Ids que identifican datos del cliente, encriptarlos con la idea que no puedan ser modificados.

Al final imagino que puede aplicarse un hash a todo, tanto timestamp (para caducidad) como datos del cliente, a quién se envía el SMS. El mismo pulsará el enlace, se comprobará la caducidad, y con los datos del cliente validaremos ciertas cosas. El objetivo que ese enlace no lo modifiquen, no cambien de Id=xxx a Id=yyy, por ejemplo.


El domingo, 5 de noviembre de 2017, 10:48:20 (UTC+1), Leonardo Micheloni escribió:
Como dicen Vicenç y Juan, hay varias formas de hacerlo, si lo que necesitás es que tu URL caduque podés controlar eso desde el lado del servidor (con un simple identificador y la fecha de caducidad en la base datos) o sino que no cambie pero identificás con un token que tiene su vencimiento.
 Con respecto a enviar datos encriptados en la URL, me pregunto cuál es la necesidad de hacer eso? 
2017-11-05 8:32 GMT+01:00 Juan Carlos Quijano Abad <juancarl...@gmail.com>:
No te valdría un token normal y corriente como los de OAuth? O el de las firmas compartidas de Azure? No solo tienen TTL sino q incluyen políticas de acceso.
El 4 nov. 2017 7:50 p. m., "Vicenç Garcia" <vincen...@gmail.com> escribió:
Buenas, 

hicimos algo parecido en un anterior proyecto. Si no recuerdo mal, codificábamos todo esto en base64 y eso es lo que iba en el query string. Otra opción es pasar un identificador y guardar la info de la caducidad en la base de datos.

Salut!
2017-11-04 16:57 GMT+00:00 Carlos Admirador <admirado...@gmail.com>:
Hola gente!!!
Tenemos una app que va enviar SMS con enlaces en el texto.

Ahí se plantean varios retos:

- Acortador de Urls. Utilizamos API Shorten de Google. Tenéis alguna experiencia real world con ello? Por ejemplo, no funciona con direcciiones con IP tipo http://10.666.666.666:9000/Page.aspx.

- Caducidad del enlace, es decir, si pasan más de 4 días por ejemplo, al pulsar el enlace no tendría que ser válido.

- Cifrar parámetros de la url

Tendríamos una url tipo: 



Alguna idea para la caducidad de enlace URL y cifrado de parámetros ?

Saludos gente!!

--
Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a altnet-hispan...@googlegroups.com.

Para publicar en este grupo, envía un correo electrónico a altnet-...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/altnet-hispano.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a altnet-hispan...@googlegroups.com.

Para publicar en este grupo, envía un correo electrónico a altnet-...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/altnet-hispano.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a altnet-hispan...@googlegroups.com.

Para publicar en este grupo, envía un correo electrónico a altnet-...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/altnet-hispano.
Para acceder a más opciones, visita https://groups.google.com/d/optout.



--
@leomicheloni Microsoft MVP

Angel Java Lopez

unread,
Nov 5, 2017, 5:42:34 AM11/5/17
to altnet-...@googlegroups.com
Yo pondria un GUID como parametro

Y la caducidad, y los parametros reales, los pondria en la base de datos, accesibles desde ese GUID. O sea, la GUID encapsula una tarea cualquiera a realizar.  Internamente la base de datos por GUID, tiene la descripcion de la tarea, en el formato que quieran. Una opcion: una columna de nombre de tarea, y una columna como string y los parametros encodeados como en una URL. 

Ahora, hay que tener en cuenta que ese enlace no puede ser enviado por cualquiera, que no haya alguien copiando el enlace, y enviandolo de nuevo sin autorizacion para hacer la operacion que hay abajo. Tambien hay que contemplar si el usuario autorizado PUEDE ENVIAR ese enlace DOS O MAS veces, Que se hace? se ejecuta n veces la tarea? o solo la primera?

Esto ultmo, en cualquiera de las alternativas propuestas.

Nos leemos!

Angel "Java" Lopez
@ajlopez


Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a altnet-hispano+unsubscribe@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a altnet-hispano@googlegroups.com.

Preguntón Cojonero Cabrón

unread,
Nov 12, 2017, 7:50:55 PM11/12/17
to AltNet-Hispano


Una aproximación...

https://stackoverflow.com/questions/2966255/how-to-encrypt-decrypt-the-url-in-c-sharp#


Encryption page:

string id1 = "id1";

Response.Redirect("decryptionPage.aspx?id1=" + HttpUtility.UrlEncode(Encrypt(id1)));

private string Encrypt(string stringToEncrypt)
{
        byte[] inputByteArray = Encoding.UTF8.GetBytes(stringToEncrypt);
        byte[] rgbIV = { 0x21, 0x43, 0x56, 0x87, 0x10, 0xfd, 0xea, 0x1c };
        byte[] key = { };
        try
        {
            key = System.Text.Encoding.UTF8.GetBytes("A0D1nX0Q");
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            MemoryStream ms = new MemoryStream();
            CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(key, rgbIV), CryptoStreamMode.Write);
            cs.Write(inputByteArray, 0, inputByteArray.Length);
            cs.FlushFinalBlock();
            return Convert.ToBase64String(ms.ToArray());
        }
        catch (Exception e)
        {
            return e.Message;
        }
}


Decryption page:

string getId1 = Convert.ToString(Request.QueryString["id1"]);
var qs = Decrypt(HttpUtility.UrlDecode(getId1));
private string Decrypt(string EncryptedText)
{
        byte[] inputByteArray = new byte[EncryptedText.Length + 1];
        byte[] rgbIV = { 0x21, 0x43, 0x56, 0x87, 0x10, 0xfd, 0xea, 0x1c };
        byte[] key = { };

        try
        {
            key = System.Text.Encoding.UTF8.GetBytes("A0D1nX0Q");
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            inputByteArray = Convert.FromBase64String(EncryptedText);
            MemoryStream ms = new MemoryStream();
            CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(key, rgbIV), CryptoStreamMode.Write);
            cs.Write(inputByteArray, 0, inputByteArray.Length);
            cs.FlushFinalBlock();
            System.Text.Encoding encoding = System.Text.Encoding.UTF8;
            return encoding.GetString(ms.ToArray());
        }
        catch (Exception e)
        {
            return e.Message;
        }
}

Otra es SHA256, tipo hash
you should use a one-way hash, like SHA256, with a salt

Y más...alternativas... atención al método de encriptación











Pro ASP.NET Web API Security: Securing ASP.NET Web API



Un no parar...





Carlos Admirador

unread,
Nov 13, 2017, 4:31:54 PM11/13/17
to AltNet-Hispano
Por concretar, más que una colección de enlaces, un ejemplo de código en gist:

 

C# MD5 and SHA encryption wrapper class



MD5, SHA256, SHA384, SHA512


Atención a los algoritmos inseguros:




Specific algorithms to avoid:

  • MD5 has recently been found less secure than previously thought. While still safe for most applications such as hashes for binaries made available publicly, secure applications should now be migrating away from this algorithm.
  • SHA-0 has been conclusively broken. It should no longer be used for any sensitive applications.
  • SHA-1 has been reduced in strength and we encourage a migration to SHA-256, which implements a larger key size.
  • DES was once the standard crypto algorithm for encryption; a normal desktop machine can now break it. AES is the current preferred symmetric algorithm.

Carlos Peix

unread,
Nov 13, 2017, 5:36:47 PM11/13/17
to altnet-hispano
Secundo lo que dijo Angel, mejor que encriptar es no poner ningún tipo de información sensible en el link.

De hecho, me parece mucho mas inseguro enviar información importante encriptada (con cualquier mecanismo de encriptación).

Todas las implementaciones que recuerdo de esta solución usan un Guid aleatorio. Siempre y cuando el link salga y se evalúe, al regreso, en la misma aplicación.

----------------------------------
Carlos Peix

juan ladetto

unread,
Nov 13, 2017, 5:54:11 PM11/13/17
to Jhfjyjphuguthggjhkrirfjvggkmfjhojdhh
Toda conexión vía https queda encriptada. Todos los parámetros de la URL quedan encriptados con el certificado provisto al igual q los parámetros que pasamos x post.

Con esto, el cliente puede ver todos los parámetros que pasa pero no la gente snifeando la red.

Si no se quiere esto cómo planteaban. Guid y del otro lado toda la info que se quiere representar incluído el ttl de vigencia del código. Gralmente se usa este mecanismo para resetear pwd de plataformas.


Abzs



----------------------------------
Carlos Peix

Para publicar en este grupo, envía un correo electrónico a altnet-...@googlegroups.com.

Visita este grupo en https://groups.google.com/group/altnet-hispano.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
Reply all
Reply to author
Forward
0 new messages