2010-08-04 28 views

Respuesta

11

Como señalaron otros comentaristas, Unicode normalisation ("caracteres compatibles") no lo ayudará aquí ya que no está buscando equivalencias oficiales, sino similitudes en glifos (formas de letras). (Sin embargo, vale la pena leer el Informe técnico de Unicode vinculado, ya que está extremadamente bien escrito.)

Si yo fuera usted, para ahorrarle el tedioso trabajo de armar una lista de caracteres usted mismo, buscaría recursos en homograph attacks: este es un método para confundir maliciosamente a los usuarios de la web al mostrar URL que contienen nombres de dominio en los que algunas letras han sido reemplazadas por letras visualmente similares. Otro Unicode Technical Report, sobre seguridad, contiene una sección sobre el problema. También existe, y eso es lo que más necesita, un "confusables" table. Aquí hay otro artículo con signos de puntuación principalmente, algunos de los cuales ASCII, que tienen equivalentes visualmente similares en el non-ASCII code tables.

Lo que sí espero es que no esté haciendo la pregunta para construir un ataque así.

+0

Gracias por todos los buenos enlaces y explicaciones. De hecho, trato de protegerme contra tales ataques. :-) Y creo que encontraré más material con la palabra clave "homógrafo de ataque". – DrDol

+0

Eso es bueno para escuchar :). Sí, esa es la palabra clave que necesitas! Edité un enlace (apuntaba a una versión obsoleta). – chryss

+0

Un uso legítimo: para las pruebas de internacionalización, tengo una herramienta que genera texto falso en un idioma extranjero usando caracteres similares. Un examinador de habla inglesa puede leer el texto "extranjero", pero también puede decir claramente que no es un inglés codificado. Aunque no funciona si el carácter Unicode es tan similar que no puede ver la diferencia. Principalmente hago cosas como agregar acentos a las vocales. – Kip

-1

Consulte la base de datos Unicode: http://www.unicode.org/Public/UNIDATA/UnicodeData.txt.

Cada línea describe un caharacter Unicode, por ejemplo:

1E9A;LATIN SMALL LETTER A WITH RIGHT HALF RING;Ll;0;L;<compat> 0061 02BE;;;;N;;;;; 

Si hay alguna caracteres similares (compatible) para ese símbolo, que aparecerá en el campo de la entrada <compat>. En este ejemplo, 0061 (ASCII a) es compatible con el carácter Unicode LATIN SMALL LETTER A WITH RIGHT HALF RING.

En cuanto a su carácter, la entrada es

0455;CYRILLIC SMALL LETTER DZE;Ll;0;L;;;;;N;;;0405;;0405 

que, como se puede ver, no especifica un carácter compatibilidad.

+0

El campo de compatibilidad describe una secuencia de caracteres que significaría lo mismo que el personaje en cuestión. En su ejemplo, la secuencia compatible sería 'U + 0061' (la letra 'a') seguida por' U + 02BE' (el modificador 'medio anillo derecho'). Para los personajes de diferentes alfabetos, sería bastante inusual que haya secuencias de compatibilidad, y eso haría que lo que el PO intenta hacer sea imposible sin más información. – cHao

+0

El OP indica 'similar a caracteres ASCII', no es exacto. Si está buscando una 'a' con un medio anillo derecho, puede conformarse con un ASCII 'a' si no hay nada más disponible. – adamk

+0

De acuerdo, en ese caso. Pero si está buscando un carácter ASCII similar a un cirílico & # x0455 ;, que es el mismo ejemplo que utilizó el OP, eso no funcionará. – cHao

Cuestiones relacionadas