¿Cómo lee un servidor el identificador que una etiqueta refleja en su URL?
Como parte de la dirección pedida. Un chip con reflejo escribe su identificador, y en algunos chips su contador de lecturas, dentro de la URL como caracteres hexadecimales, en una posición elegida al configurar la etiqueta. El servidor los extrae y los trata como una afirmación sobre qué etiqueta se leyó, no como una prueba.
Lo que llega al servidor
El chip inserta los caracteres mientras se lee la etiqueta, así que el teléfono recibe una URL que ya los contiene, y la página de la URL única explica por qué eso hace distinguibles etiquetas escritas igual. El servidor recibe una petición corriente de esa URL.
La recibe solo si el teléfono abre el enlace. Un iPhone que lee una etiqueta en segundo plano enseña un aviso que hay que tocar, y desde Android 17 un teléfono Android enseña otro, según la página del comportamiento de Android. Quien lo ignora ha leído la etiqueta sin que el servidor se entere.
El contador lleva su propia cuenta. En un NTAG213 se incrementa en la primera lectura tras entrar la etiqueta en el campo, según su ficha en wakdev.com, haya petición detrás o no, así que los huecos entre los valores que recibe un servidor son normales: la página de los códigos rotativos lo llama deriva.
Extraer los valores
Dónde caen los caracteres se decide al configurar la etiqueta, mediante los ajustes de reflejo que describe la ficha del chip. Ponlos en un parámetro de consulta con nombre o en un segmento fijo de la ruta de la URL escrita en la etiqueta, y analiza la petición por ese nombre, no contando caracteres desde el principio de la dirección.
El identificador de un NTAG213 son siete bytes, según la misma ficha, así que llega como catorce caracteres hexadecimales; su contador es de 24 bits, seis caracteres. Un chip de otra familia tiene otras longitudes, y el código las saca de la ficha de ese chip y no de la primera etiqueta que se encontró.
Validar antes de usar
Cualquiera puede teclear la URL, así que los valores son entrada como cualquier otra. Comprueba la longitud y que todos los caracteres sean hexadecimales, compara sin atender a mayúsculas, y rechaza cualquier otra cosa antes de que llegue a una consulta de base de datos o a un registro que alguien vaya a leer.
Un formato válido no dice nada sobre la existencia. Busca el identificador en el registro de las etiquetas desplegadas, el apunte de qué etiqueta contiene qué, y trata un identificador desconocido como desconocido, no como una etiqueta nueva que crear.
Donde el identificador pertenece a un objeto que alguien lleva encima, como una credencial, el apunte se convierte en datos sobre esa persona, y la página de la protección de datos cubre lo que viene después.
Por qué no prueba nada
El identificador reflejado lo lee cualquiera que acerque el teléfono a la etiqueta, y la URL que lo lleva se puede copiar y repetir sin la etiqueta. La página de la URL única lo dice sin rodeos: identifica, no autentica.
Un contador a secas añade poco. Un servidor que recuerda el valor más alto visto para cada identificador puede rechazar una URL vieja repetida tal cual, pero cualquiera puede teclear un número más alto, y quien tenga la etiqueta lee uno fresco, el límite que describe la página de los códigos rotativos.
La prueba necesita un valor que el servidor pueda verificar criptográficamente. El NTAG 424 DNA inserta un AES CMAC derivado de su identificador y de un contador de 24 bits, verificable del lado del servidor, según su ficha en wakdev.com. Cómo verificarlo pertenece a la documentación de ese chip, y qué tiene que guardar quien verifica a la página de la verificación.
Preguntas frecuentes
¿Por qué dos peticiones llevan el mismo valor de contador?
La misma URL se abrió dos veces sin una lectura nueva, por una recarga o una copia del enlace. Una lectura nueva de la etiqueta habría dado un valor nuevo.
¿Por qué el contador salta entre peticiones?
La etiqueta se leyó sin que se abriera el enlace, y el contador se incrementa en cada lectura. La página de los códigos rotativos llama a esto deriva.
¿El identificador reflejado es único?
Es el identificador de fábrica, pensado para ser único dentro de la asignación del fabricante, y legible por cualquiera. Identifica una etiqueta, no la autentica.
¿Un servidor distingue una etiqueta auténtica de una URL copiada?
Con un reflejo a secas no. Hace falta un chip que inserte un valor criptográfico, como el CMAC del NTAG 424 DNA, y un servidor que guarde la clave.