2010-12-03 11 views
5

Estoy desarrollando una aplicación PHP para administrar pedidos para una empresa. Para ver un pedido, la URL es actualmente /orders/view/3502.Datos encriptados en las URL

No deseo que el número de ID de la orden aparezca en la URL, así que utilicé la biblioteca de cifrado de CodeIgniter para encriptar la ID en la URL. La URL (después del cifrado) se ve como /orders/view/AaffGdQQ.

El problema que tengo es que algunas veces el ID encriptado contiene una barra diagonal o un signo más, que no funcionan correctamente cuando están en una URL. CodeIgniter lee la URL en función de barras diagonales, por lo que, si la ID cifrada tuviera una barra inclinada, la leería como 2 variables, no como una. Además, los signos más se interpretan como espacios en las URL.

Entonces, mi pregunta es, ¿cómo puedo encriptar la identificación y estar seguro de que la cadena no contiene un signo más o una barra inclinada?

EDIT: tuve una idea para ver si el ID encriptado contenía una barra o signo más, y si lo hacía, encriptarlo de nuevo. Por alguna razón, cada vez que se encripta la identificación, es diferente, así que esto funcionaría.

+0

¿Qué hay de malo en mostrar la ID del pedido en la URL? –

+0

Mi jefe no lo quiere allí por "razones de seguridad". –

+0

Debe proteger los pedidos marcando si el usuario está realmente autorizado a ver el pedido, no por ofuscación de URL. – newbie

Respuesta

8

También puede base64_encode(). Eso también lo hará mucho más largo y aparecerá "más seguro". También agrega una capa de ofuscación.

+0

Quiero que el usuario no pueda decodificarlo. –

+0

Sí, pero ya lo está encriptando con codeignighter :-) - esto eliminará los caracteres de la cadena encriptada que no se pueden usar en una URL. También ofusca la cadena encriptada. – Jack

+0

Oh, ¿te refieres a base_64 los datos encriptados? Es una buena idea. –

0

Busque algunos caracteres que el cifrado no utiliza y reemplácelos como corresponda. Cuando uses urls, deshazlo.

+0

Estaba pensando en esto. O mejor dicho, encriptarlo de nuevo. Cada vez que encripto la identificación, es diferente. –

1

Tal vez pasar los datos cifrados a través de urlencode() podría solucionar esto? Después de hacer eso, debería interceptar los datos antes de que CodeIgniter lo haga, y ejecutar urldecode() en él.

Solo una idea rápida, ¡así que buena suerte!

+0

¿No sería eso inflar la URL? Bueno, solo un poco, por lo que sería aceptable. – thejh

+0

¿Qué pasa con la hinchazón? Stack Overflow se hincha bastante bien ... No debería hincharse demasiado, ya que podría aumentar la longitud en ~ 5 caracteres. – Blender

+0

Intenté esto, pero un signo más urlencodeed en una URL todavía se interpreta como un espacio, y una barra urlencoded sigue siendo una barra inclinada. –

Cuestiones relacionadas