Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

337
Vistas
Vuelva a escribir la función Javascript sin usar eval() para ser más seguro

¿Alguien que navega por el sitio puede ayudarme a reescribir esta antigua función de aplicación web para que sea un poco más segura?

 $('table.dataTable.json-data').each(function() { console.log("dataTable function thing called"); var oTable = $(this).css('visibility', 'visible'); var dt_config = oTable.is('[data-dt_config]')? eval('('+oTable.attr('data-dt_config')+')') : {}; if(oTable.is('[data-dt_settings]')) { $.extend(true,dt_config,oTable.data('dt_settings')); }

Entonces, por contexto, esta función de Javascript se llama cuando un usuario desea imprimir o exportar una tabla de datos que ha mostrado en una página. Genera una nueva página con la tabla y aparece un menú de impresión (o su navegador descarga automáticamente su documento).

Mi cliente insiste en que data-dt_config se puede verificar antes de ejecutar eval() para evitar la inyección, pero realmente ni siquiera quiero usar eval() en absoluto.

He mejorado mucho con perl y php, pero Javascript todavía está fuera de mi elemento. Por favor, siéntete libre de explicármelo como si comiera crayones, porque me gustaría usar esta publicación como una buena oportunidad de aprendizaje para comprender mejor Javascript, especialmente en términos de codificación segura.

 Object buttons: Array(3) 0: {extend: 'csv'} 1: {extend: 'pdf', orientation: 'landscape'} 2: {extend: 'print', customize: ƒ} length: 3 [[Prototype]]: Array(0) columns: (8) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}] createdRow: ƒ (row,data,dataIndex) filename: "Material deduction history" lengthMenu: (2) [Array(4), Array(4)] source: "material/1007199/history" [[Prototype]]: Object

Este es el contenido de la variable dt_config . Parece ser literalmente solo un conjunto de instrucciones para hacer la tabla de datos.

Esta es la solución de tirita que arrojé:
let tempConfig = oTable.attr('data-dt_config');

let testResult = tempConfig.includes("buttons","orientation","customize");

Sigo pensando que sería extremadamente fácil de eludir, así que estoy investigando algo mejor. Un poco de sabiduría sobre esto sería genial.

about 4 years ago · Juan Pablo Isaza
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda