¿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.