2012-06-22 13 views
5

Duplicar posible:
How can you encode to Base64 using Javascript?¿Cómo enviar datos de formularios multiparte binarios como base64?

Tengo una aplicación web basada en Java, Wicket y jQuery que tiene una función para permitir a los usuarios subir archivos (imágenes, archivos PDF, RTF) a través de multipart/form-data.

Nuestra infraestructura de seguridad web filtra todo el tráfico http para recoger contenido posiblemente malicioso, p. Ataques XSS, inyección de SQL, desbordamiento de búfer, etc.

El filtro no distingue entre los campos de entrada de texto normales y los datos de archivo para detectar falsos positivos de muchos archivos binarios cargados, evitando que esos archivos se carguen. No puedo cambiar la política de seguridad.

Parece que la mejor manera de evitar esto sería que los datos de los archivos estén codificados en base 64 para que se envíen con Content-Transfer-Encoding: base64 similar a lo que hacen los clientes de correo electrónico.

¿Hay alguna manera de dirigir el navegador para transferir el binario como base64 o algún otro formato no binario?

Si no, ¿podría hacerse manualmente con un poco de JavaScript?

+4

¿Por qué mi pregunta se cerró como duplicado? No pregunté "¿Cómo se puede hacer la codificación base64 con JavaScript". Pregunté si había alguna forma de que los datos del formulario binario se codificaran ** en algún formato de caracteres, por ejemplo, base64 ** en el contexto de un envío de formularios, ya sea de forma automática o con ayuda de JavaScript. No he encontrado esta pregunta tratada en otro lugar en stackoverflow. – David

+3

Estoy de acuerdo, no fue un duplicado exacto. – biziclop

Respuesta

2

Parece que se puede establecer Content-Transfer-Encoding: base64
cita del W3C:

Cada parte puede ser codificado y el "Content-Transfer-Encoding" cabecera suministra si el valor de la parte no se ajusta a la predeterminado (7 bits) de codificación

http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2

Siempre y cuando su web Server utilizado no es el parámetro Ingore Content-Transfer-Encoding.

+1

Creo que la presencia de 'Content-Transfer-Encoding: base64 'indicaría al servidor que el navegador efectivamente ha convertido los datos binarios a base64 para el transporte. No lo establece el desarrollador, sino cómo responde el navegador a la etiqueta de entrada del archivo. Pero, ¿cómo se puede hacer que el navegador haga la codificación base64? – David

+2

o puede hacer la codificación base64, hay pocos complementos jQuery disponibles: https://github.com/carlo/jquery-base64 – didxga

Cuestiones relacionadas