validacion - validar formulario javascript html5
¿La mejor forma de leer con seguridad los parámetros de cadena de consulta? (5)
No use escape y unescape, use decodeURIComponent. P.ej
function queryParameters(query) {
var keyValuePairs = query.split(/[&?]/g);
var params = {};
for (var i = 0, n = keyValuePairs.length; i < n; ++i) {
var m = keyValuePairs[i].match(/^([^=]+)(?:=([/s/S]*))?/);
if (m) {
var key = decodeURIComponent(m[1]);
(params[key] || (params[key] = [])).push(decodeURIComponent(m[2]));
}
}
return params;
}
y pasar en document.location.search.
En cuanto a convertir <en & lt ;, eso no es suficiente para garantizar que el contenido se pueda inyectar de forma segura en HTML sin permitir que se ejecute el script. Asegúrese de escapar de los siguientes <,>, & y ".
No garantizará que los parámetros no hayan sido falsificados. Si necesita verificar que uno de sus servidores generó la URL, realice una búsqueda en la firma de URL.
Tenemos un proyecto que genera un fragmento de código que se puede usar en varios otros proyectos. El propósito del código es leer dos parámetros de la cadena de consulta y asignarlos al atributo "src" de un iframe.
Por ejemplo, la página en la URL http: //oursite/Page.aspx? A = 1 & b = 2 tendría JavaScript para leer los parámetros "a" y "b". El JavaScript entonces establecería el atributo "src" de un iframe basado en esos parámetros. Por ejemplo, "<iframe src =" http: //someothersite/Page.aspx? A = 1 & b = 2 "/>"
Actualmente estamos haciendo esto con un código del lado del servidor que usa la biblioteca Anti Cross-Scripting de Microsoft para verificar los parámetros. Sin embargo, un nuevo requisito ha venido indicando que necesitamos usar JavaScript, y que no puede usar herramientas de JavaScript de terceros (como jQuery o Prototype).
Una forma que conozco es reemplazar cualquier instancia de "<", comillas simples y comillas dobles de los parámetros antes de usarlas, pero eso no me parece lo suficientemente seguro.
Uno de los parámetros es siempre una "P" seguida de 9 enteros. El otro parámetro es siempre 15 caracteres alfanuméricos. (Gracias Liam por sugerir que lo deje en claro).
¿Alguien tiene alguna sugerencia para nosotros?
Muchas gracias por tu tiempo.
Puede usar expresiones regulares para validar que tiene una P seguida de 9 enteros y que tiene 15 valores alfanuméricos. Creo que ese libro que tengo en mi escritorio de RegEx tiene algunos ejemplos en JavaScript para ayudarte.
Limitar el juego de caracteres a solo valores ASCII ayudará, y siga todos los consejos anteriores (lista blanca, establecer src a través de DOM, etc.)
Usar un enfoque de lista blanca sería mejor, supongo. Evite solo eliminar cosas "malas". Tira todo lo que no sea lo que creas que es "seguro".
También recomiendo hacer un HTMLEncode the Parameters. Debería haber muchas funciones de Javascript que pueden hacer esto.
Varias cosas que deberías estar haciendo:
- Estrictamente incluya en la lista blanca sus valores aceptados, de acuerdo con el tipo, formato, rango, etc.
- De manera explícita, la lista negra de ciertos caracteres (aunque esto generalmente es pasable), SI su lista blanca no puede ser extremadamente estrecha.
- Codifique los valores antes de la salida, si está usando Anti-XSS, ya sabe que un simple código Html no es suficiente
- Establezca la propiedad src a través del DOM - y no generando fragmentos de HTML
- Use el valor dinámico solo como un parámetro de cadena de consulta, y no para sitios arbitrarios; es decir, hardcode el nombre del servidor, la página de destino, etc.
- ¿Su sitio está sobre SSL? Si es así, usar un marco puede causar inconsistencias con la interfaz de usuario de SSL ...
- Usando marcos con nombre en general, puede permitir Frame Spoofing; si está en un sitio seguro, este puede ser un vector de ataque relevante (para usar con phishing, etc.)
puede usar las funciones de escape () y unescape () de javascript.