¿Agregar parámetros de cadena de consulta a form.action o a.href usando Javascript?

4

Tengo una página HTML que acepta cualquier número de parámetros de cadena de consulta, que debo pasar a la siguiente página que el usuario visita haciendo clic en los enlaces de mi página. Básicamente, si el usuario llega a

http://example.com/some/page.html?param1=123&param2=567&smthelse=abcde 

La mayoría de estos parámetros de cadena de consulta tienen naturaleza de seguimiento. Necesito asegurarme de que cuando el usuario haga clic en ciertos enlaces de esta página o envíe ciertos formularios POST, todas estas cadenas de consulta pasen a la página siguiente.

Si es posible, estoy buscando evitar los parámetros de cadenas de consulta de la lista blanca / lista negra que se deben pasar a la página siguiente, ya que es un mantenimiento considerable. En lugar de eso, estoy planeando usar jQuery / Javascript para leer dinámicamente todas las cadenas de consulta y actualizar los atributos de los atributos y formas de href de los anclajes para agregar el valor window.location.search completo a estas URL.

Ejemplo ( jsbin ):

$(document).ready(function() {
    var pageQsParams = window.location.search.split('?')[1] || '';

    var newLinkUrl =   $('.link').attr('href') + (pageQsParams ? '?' + pageQsParams : '');
    $('.link').attr('href', newLinkUrl);

    var newFormUrl =   $('#form').attr('action') + (pageQsParams ? '?' + pageQsParams : '');
    $('#form').attr('action', newFormUrl);
}); 

¿Este código es vulnerable a XSS o phishing? ¿Alguna otra vulnerabilidad de seguridad? ¿Alguna mejor manera de hacerlo?

    
pregunta vgrinko 13.02.2017 - 03:22
fuente

1 respuesta

1

Este código es seguro.

jQuery.attr no se puede escapar a través de caracteres especiales, ya que utiliza un setAttribute internamente.

Como establece los atributos href / action, también debe verificar que un atacante no pueda manipular la URL.

Ya que agrega un prefijo ? a la cadena de consulta, iniciará la parte de la cadena de consulta en la URL final, y evitará cualquier manipulación de ruta / host, siempre que las URL anteriores estén bien formadas y use un http o https esquema.

Si las URL anteriores usaron el esquema javascript , entonces habría sido posible un vector XSS.

    
respondido por el Benoit Esnard 14.03.2018 - 17:25
fuente

Lea otras preguntas en las etiquetas