Use POST para enviar solicitudes que modifiquen datos en el servidor.
Por la especificación HTTP , las solicitudes GET (por ejemplo, los parámetros en la URL) solo deben usarse para las solicitudes para recuperar (de ahí el nombre GET) pero no modificar los datos. Las solicitudes POST (parámetros no visibles, pero aún sin cifrar en la solicitud HTTP) deben usarse siempre que la solicitud cree / actualice / modifique los datos que se almacenarán en la base de datos (que no sean registros estándar). Esto hace que sea ligeramente más difícil para que los atacantes realicen falsificaciones de solicitudes en sitios cruzados, así como menos probabilidades de enviar por duplicado o almacenar información secreta en el historial de su página web / registros del servidor web.
¿Es la variable pin un secreto?
Lo que estás haciendo en este momento parece que podría ser inseguro dependiendo del significado de la variable pin
. ¿Es necesario que esto se mantenga en secreto ante posibles escuchas ilegales o podría la gente interceptar el pasador realizar algún tipo de ataque con él? Si es así, solo use HTTPS (para el cifrado de extremo a extremo en la capa de transporte) para cada solicitud con esta información secreta. El valor base-64 que usaste parecía ser 3000670269
(concedido, tuve que agregar dos signos iguales para que sea una codificación b64 adecuada).
¿Qué pasaría si un atacante intentara usar otros pines?
Digamos mi pin='300670269'
, pero para probar su sistema envié MzAwMDY3MDI1OQ
(para pin='3000670259'
). ¿Eso les permitiría entrar efectivamente en la cuenta de otro usuario? Si es así, como mínimo, debería hacer algo como tener una variable POST extra como checksum=SHA256(pin+secret_server_side_string)
donde secret_server_side_string
es una cadena aleatoria larga (por ejemplo, algo como de10RRORX50UAUhx0dDIxJnzXKBAs68yjdWVz8QQ
- 40 random upper + lower + los caracteres de los números tienen lg (62) * 40 = 238 bits de entropía), y sus aplicaciones solo actúan en el pin si la suma de comprobación coincide con el pin. Su aplicación debe generar la suma de comprobación (sin revelar el secret_server_side_string al cliente). También debe tener cuidado de que su aplicación realice comparaciones de cadenas de tiempo constante al verificar la suma de comprobación con el pin, por lo que su aplicación no es vulnerable a los ataques de tiempo.