2011-02-09 42 views
5

Solo intento hacer algo de seguridad en mi sitio web y tratar de encontrar la mejor ruta para obtener una ID.Encriptar/Codificar una ID en la cadena de URL

Ejemplo: http://localhost/page.php?id=90 A: http://localhost/share/22349234987sdsdf9sdf87423498asf9

estoy usando htaccess para hacer la parte de la cuota. Pero me gustaría esconder el '90' e intentar desalentar a cualquiera de solo agregar números aleatorios para tratar de recibir una respuesta diferente.

¿Alguna idea sobre cómo crear algo como esto, o si ya existe algo que funciona bien con la implementación?

La seguridad es un factor, por lo que sólo tratando de encontrar la mejor solución por ahí ...

+0

¿Cómo no? muestra una identificación simple, que cualquiera puede cambiar ... – Justin

+0

@Justin: ¿y qué? Puede cambiar 'id' aquí, en SO. ¿Algún problema con eso? – zerkms

Respuesta

3

Ocultar la identificación es oscuridad, no seguridad.

Si quieres buena oscuridad, mira las funciones mcrypt en PHP. Asegúrese de agregar una sal antes de codificar y decodificar, de lo contrario será fácil adivinar el cifrado/descifrado.

Y tenga en cuenta que cualquier otra persona puede tropezar con sus URL, lo que puede anular por completo. Usaría alguna forma de HTTP Auth sobre HTTPS si también quieres seguridad.

+0

Sí, lo he implementado sobre una estructura HTTPS, solo por este motivo me preguntaba cómo "ocultar" el ID de la mejor manera. Veré más en ID IDrypt. Gracias – Justin

2

Un amigo mío puso en práctica un método de firma de todas las peticiones GET con la sesión actual de token y un secreto para evitar CSRF ataques.

Pero lo que intenta hacer es tener una URL que pueda compartir con otras personas.

Puede crear un hash MD5 que se asemeje a la url original, y guardar ambos en la base de datos.

Ahora cuando se abre/share/someLongId, puede verificar en la base de datos a qué URL pertenece el hash y puede redirigir al usuario a esa URL.

Otra posibilidad es usar GUID en lugar de auto-incrementar identificadores en primer lugar. De esta forma, todos los ID son más largos y no es tan fácil de adivinar.

1

Dependiendo de si usted lo necesita (la URL) a ser persistentes o no, fría haces bien:

no persistente: hacer algo como esto:

function getLink($id) { 
    $random = md5(uniqid()); 
    $_SESSION['links'][$random] = $id; 
    return "http://localhost/share/$random"; 
} 
echo getLink(10); 

y luego:

function getTrueId($id) { 
    if(isset($_SESSION['links'][$id]) { 
    return $_SESSION['links'][$id]; 
    } else { 
    die("Unknown link!"); 
    } 

}

Esto hará que los enlaces utilizables sólo para el usuario actual en la sesión actual. Si lo necesita persistente, puede generar identificadores aleatorios y almacenarlos en la base de datos junto con identificaciones reales, pero esto puede ser inútil, ya que la identificación aleatoria se puede usar en lugar de ID real para hacer las mismas cosas ...

Cuestiones relacionadas