En ciències de la computació, la canonització (abreujat com c14n, on 14 representa el nombre de lletres entre la C i la N; també anomenada estandardització o normalització) és un procés per convertir dades que tenen més d'una representació possible en una forma "estàndard", "normal", o canònica. Això es fa per poder comparar si dues representacions diferents són equivalents, per recomptar el nombre d'estructures de dades diferents, per millorar l'eficiència de diversos algorismes tot eliminant càlculs repetits, o per fer possible una ordenació de les dades.

Exemples d'ús Servidors web La canonització dels noms d'arxius és important per la seguretat informàtica. Per exemple, un servidor web pot contenir una regla de seguretat que digui "executar només arxius del directori cgi (C:\inetpub\wwwroot\cgi-bin)". Aquesta regla es concreta en comprovar que la ruta comença per "C:\inetpub\wwwroot\cgi-bin\", i si és així, s'executa l'arxiu.

Amb aquesta premissa de seguretat, hom es pot plantejar la pregunta de si s'hauria d'executar l'arxiu "C:\inetpub\wwwroot\cgi-bin\..\..\..\Windows\System32\cmd.exe". Aquesta ruta puja per l'estructura de directoris (a causa de l'indicador de directoris '..'), i no roman al directori cgi-bin. Si el servidor web acceptés aquesta ruta, posaria en perill la seguretat del lloc web. Si es canonitza la representació del directori, s'obté la representació "C:\Windows\System32\cmd.exe", on ja es pot comprovar que no és una ruta acceptable. aquest tipus de debilitats en la seguretat s'anomenen directory traversal.

Unicode Les codificacions de longitud variable en l'estàndard Unicode, en particular UTF-8, tenen més d'una possible codificació per a la majoria de caràcters. http://www.ietf.org/rfc/rfc2279.txt Això fa que la validació de cadenes de caràcters sigui més complicada, perquè hom ha de considerar totes les possibles codificacions de cada cadena. Una solució de programari que no considerés totes les codificacions tindria el risc d'acceptar cadenes que, de fet, són invàlides, la qual cosa podria provocar errors o permetre atacs des de l'exterior. La solució és permetre una única codificació per a cada caràcter. La canonització és, doncs, el procés de traduir cada cadena de caràcters a la seva única codificació permesa. Una alternativa és que el programari determini si una cadena està en forma canònica, i rebutjar-la si no ho està. En aquest cas, en un context client/servidor, la canonització seria responsabilitat de la part client.

Motors de cerca En les cerques a internet i en optimització per a motors de cerca, la canonització dels URL té a veure amb el contingut web que pot tenir més d'un URL. El fet de tenir múltiples adreces URL pel mateix contingut web pot causar problemes als motors de cerca, sobretot a l'hora de determinar quin URL s'ha de mostrar en els resultats de la cerca.

Per exemple: http://wikipedia.com http://www.wikipedia.com http://www.wikipedia.com/ http://www.wikipedia.com/?source=asdf

Tots aquests URL apunten a la pàgina inicial de Wikipedia, però un motor de cerca només considerarà un d'aquests com a forma canònica de l'URL.

XML La canonització d'un document XML, definida per l'especificació del World Wide Web Consortium, consisteix a eliminar els espais en blanc dintre de les etiquetes, usar codificacions de caràcters determinades, ordenar les referències a espais de noms, eliminar-ne les redundants, eliminar declaracions XML i DOCTYPE, i transformar adreces URI relatives en absolutes.

Vegem un exemple; donades aquestes dues versions del mateix XML: "Data    Dada" "Data Dada" (noteu els espais en blanc) La forma canonitzada podria ser: "DataDada" Noteu que s'han eliminat els espais en blanc; això forma part del procés de canonització.

A continuació es presenten alguns aspectes de la canonització d'un document XML: El document està codificat en UTF-8 Els salts de línia es normalitzen a #xA, abans de seguir el procés Es normalitzen els valors dels atributs Se substitueixen les referències d'entitat Les seccions CDATA es substitueixen pel seu contingut caràcter S'eliminen la declaració XML i la declaració del tipus de document Els elements buits es converteixen a parells d'etiquetes inici-final Es normalitzen els espais en blanc fora de l'element de document i dins de les etiquetes d'inici i final Es mantenen els espais en blanc dins el contingut caràcter (exclosos els caràcters eliminats durant la normalització dels salts de línia) Els delimitadors pels valors dels atributs es canvien a cometes dobles Els caràcters especials dins els valors dels atributs i contingut caràcter se substitueixen per referències de caràcter S'eliminen de cada element les declaracions supèrflues d'espais de noms S'afegeixen atributs per defecte a cada element Es corregeixen els atributs xml:base S'imposa l'ordre lexicogràfic en les declaracions dels espais de noms i en els atributs de cada element

Referències

Enllaços externs Canonical XML Version 1.0, W3C Recommendation OWASP Security Reference for Canonicalization

Categoria:Terminologia informàtica