elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web (Moderador: #!drvy)
| | |-+  [Pregunta]: ¿Como podría ejecutar solamente un <script> en un archivo ajax?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Pregunta]: ¿Como podría ejecutar solamente un <script> en un archivo ajax?  (Leído 2,036 veces)
Leguim


Desconectado Desconectado

Mensajes: 719



Ver Perfil
[Pregunta]: ¿Como podría ejecutar solamente un <script> en un archivo ajax?
« en: 17 Agosto 2019, 20:32 pm »

Buenos días...
Estaría teniendo el siguiente problema y es que tengo una función ajax donde lo que hace es sumar dos valores, valor A y valor B. En base a estos dos resultados se los suma y muestra el resultado en forma de "alert();" a través de un <script> en un fichero .php

Es decir, digamos:
Código
  1. var valor_a = 3;
  2. var valor_b = 4;
  3.  
  4. Sumar(valor_a, valor_b);
  5.  

La función Sumar:
Código
  1. function Sumar(value_a, value_b)
  2. {
  3.     var resultado_suma = valor_a + valor_b;
  4.     $.ajax({
  5.          url: 'archivo_ajax.php',
  6.  type: 'POST',
  7.  dataType: 'html',
  8.  data: {resultado_suma},
  9.     })
  10.  
  11.     .done(function(results)
  12.     {
  13.  $('body').html(results);
  14.     })
  15. }
  16.  

Fichero ajax.php:
Código
  1. ?>
  2. <script type="text/javascript>
  3. alert('<?php echo($_POST['resultado_suma']); ?>');
  4. </script>
  5. <?php
  6.  

Como pueden ver lo único que hago es ejecutar un <script> siempre como norma general para ejecutar códigos utilizando AJAX los hago similar a esto, donde tengo que agregar código html pero ahora que solamente quiero ejecutar un script y nada más nose como hacerlo por que al poner en la función ajax .html(results); el body se pone todo blanco desaparece mi pagina queda todo en blanco.

Espero poderme haber dado a entender, Muchas gracias!


« Última modificación: 17 Agosto 2019, 20:35 pm por MiguelCanellas » En línea

WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.589


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: [Pregunta]: ¿Como podría ejecutar solamente un <script> en un archivo ajax?
« Respuesta #1 en: 17 Agosto 2019, 21:13 pm »

Hola, asi es, se pone en blanco porque le estás diciendo a jquery que todo el contenido body tendrá tu texto en html, en ves de eso debes utilizar .append().

Adicionalmente te recomiendo que no continues programando de esa manera, en ves de obtener código html y pegarlo en el sitio web puedes solamente obtener código javascript y ejecutarlo con eval(), de esa manera no tendrás necesidad de estar pegando código html.

Saludos.


En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: [Pregunta]: ¿Como podría ejecutar solamente un <script> en un archivo ajax?
« Respuesta #2 en: 17 Agosto 2019, 21:23 pm »

No hay ninguna razón para enviar código en javascript o evaluarlo así. Si necesitas obtener información te montas una API que regrese los datos en JSON. No tienes porque enviar información por <script>s.
En línea

#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.850



Ver Perfil WWW
Re: [Pregunta]: ¿Como podría ejecutar solamente un <script> en un archivo ajax?
« Respuesta #3 en: 17 Agosto 2019, 22:12 pm »

Citar
No hay ninguna razón para enviar código en javascript o evaluarlo así. Si necesitas obtener información te montas una API que regrese los datos en JSON. No tienes porque enviar información por <script>s.

+1


Además en este caso, si solo quieres mostrar el alert, no bastaría con poner el alert en el done.


Saludos
En línea

Leguim


Desconectado Desconectado

Mensajes: 719



Ver Perfil
Re: [Pregunta]: ¿Como podría ejecutar solamente un <script> en un archivo ajax?
« Respuesta #4 en: 17 Agosto 2019, 22:25 pm »

Hola, asi es, se pone en blanco porque le estás diciendo a jquery que todo el contenido body tendrá tu texto en html, en ves de eso debes utilizar .append().

Adicionalmente te recomiendo que no continues programando de esa manera, en ves de obtener código html y pegarlo en el sitio web puedes solamente obtener código javascript y ejecutarlo con eval(), de esa manera no tendrás necesidad de estar pegando código html.

Saludos.

Muchas gracias a los tres por responderme!

Es decir para ir mostrando registros de 5 en 5. de ante mano muestre 5 y luego al tocar un botón de ver más muestre otros 5, estoy usando esa manera de agregar código html como sería hacerlo con eval() ?
Representa alguna vulnerabilidad hacerlo así?

Gracias por tu respuesta me sirvio mucho!!

"No hay ninguna razón para enviar código en javascript o evaluarlo así. Si necesitas obtener información te montas una API que regrese los datos en JSON. No tienes porque enviar información por <script>s."

   - Hola! me podrías decir como es eso? parece interesante

"Además en este caso, si solo quieres mostrar el alert, no bastaría con poner el alert en el done.


Saludos"

   - Hola! Si te referís a como hice este pequeño sistema, generalmente siempre que tengo un problema y creo un tema lo hago usando la base del problema. El sistema en realidad es mucho mas complejo y robusto que los sistemas que comento. El alert no importa realmente son solo bases que uso para explicar el problema.

Gracias a los 3!
« Última modificación: 17 Agosto 2019, 22:33 pm por MiguelCanellas » En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: [Pregunta]: ¿Como podría ejecutar solamente un <script> en un archivo ajax?
« Respuesta #5 en: 17 Agosto 2019, 22:53 pm »

Muchas gracias a los tres por responderme!

Es decir para ir mostrando registros de 5 en 5. de ante mano muestre 5 y luego al tocar un botón de ver más muestre otros 5, estoy usando esa manera de agregar código html como sería hacerlo con eval() ?
Representa alguna vulnerabilidad hacerlo así?

Gracias por tu respuesta me sirvio mucho!!

La diferencia es que regresarías el string sin los <script>s:

Código
  1. alert('<?php echo($_POST['resultado_suma']); ?>');

Y en tu código:

Código
  1.     .done(function(results)
  2.     {
  3.  eval(results);
  4.     })
  5.  

Pero para efectos de seguridad viene siendo lo mismo. Por ejemplo, en tu caso estás haciendo una suma de 2 variables y una persona pudiera pensar que es seguro porque si tu sumas otra cosa que son números resulta en NaN (Not A Number) , por lo que una persona pudiera pensar que el dato que se va enviar en tu función Suma está restringida a números solamente.

Pero en javascript, el operador + se utiliza para concatenar strings también... y aquí empiezan los problemas sobre valor_a y valor_b. Si una persona tiene control sobre valor_a y valor_b pueden cambiar los valores, por ejemplo si se corre lo siguiente:

Código
  1. valor_a = "", valor_b ="'); $('body').html('XSS";
  2. Suma(valor_a, valor_b);

Te sale un alert y luego puedes ejecutar cualquier cosa en javascript. Bueno, este es solo un ejemplo, modificar valor_a y valor_b también tiene su gracia. Puedes modificar la funciona de Suma para que solo trabaje con números:

Código
  1. var resultado_suma = Number(valor_a) + Number(valor_b);

¿Pero porque? Tu servidor puede simplemente regresar el número:

Código
  1. echo($_POST['resultado_suma']);

Y tu javascript solo tiene que hacer esto:

Código
  1. .done(function(results)
  2. {
  3.  alert(results);
  4. });

Y si quieres estar seguro que vaya a ser un numero usas Number para asegurarte que te regrese un número siempre.

Si quieres trabajar con diferentes tipos de datos, como strings, numeros, objetos, arreglos, etc tienes JSON.

Si vas a manejar código, lo vas a tener que sobre un DSL que este diseñado para ser seguro. No es MUY díficil con las herramientas que existen hoy para trabajar con lenguajes pero tiene su costo en rendimiento obviamente.

Edit: y si como dice #!drvy también puedes poner

Código
  1. .done(alert);

Que no hay necesidad de la función anónima extra.
« Última modificación: 17 Agosto 2019, 22:58 pm por MinusFour » En línea

Leguim


Desconectado Desconectado

Mensajes: 719



Ver Perfil
Re: [Pregunta]: ¿Como podría ejecutar solamente un <script> en un archivo ajax?
« Respuesta #6 en: 17 Agosto 2019, 23:01 pm »

La diferencia es que regresarías el string sin los <script>s:

Código
  1. alert('<?php echo($_POST['resultado_suma']); ?>');

Y en tu código:

Código
  1.     .done(function(results)
  2.     {
  3.  eval(results);
  4.     })
  5.  

Pero para efectos de seguridad viene siendo lo mismo. Por ejemplo, en tu caso estás haciendo una suma de 2 variables y una persona pudiera pensar que es seguro porque si tu sumas otra cosa que son números resulta en NaN (Not A Number) , por lo que una persona pudiera pensar que el dato que se va enviar en tu función Suma está restringida a números solamente.

Pero en javascript, el operador + se utiliza para concatenar strings también... y aquí empiezan los problemas sobre valor_a y valor_b. Si una persona tiene control sobre valor_a y valor_b pueden cambiar los valores, por ejemplo si se corre lo siguiente:

Código
  1. valor_a = "", valor_b ="'); $('body').html('XSS";
  2. Suma(valor_a, valor_b);

Te sale un alert y luego puedes ejecutar cualquier cosa en javascript. Bueno, este es solo un ejemplo, modificar valor_a y valor_b también tiene su gracia. Puedes modificar la funciona de Suma para que solo trabaje con números:

Código
  1. var resultado_suma = Number(valor_a) + Number(valor_b);

¿Pero porque? Tu servidor puede simplemente regresar el número:

Código
  1. echo($_POST['resultado_suma']);

Y tu javascript solo tiene que hacer esto:

Código
  1. .done(function(results)
  2. {
  3.  alert(results);
  4. });

Y si quieres estar seguro que vaya a ser un numero usas Number para asegurarte que te regrese un número siempre.

Si quieres trabajar con diferentes tipos de datos, como strings, numeros, objetos, arreglos, etc tienes JSON.

Si vas a manejar código, lo vas a tener que sobre un DSL que este diseñado para ser seguro. No es MUY díficil con las herramientas que existen hoy para trabajar con lenguajes pero tiene su costo en rendimiento obviamente.

Edit: y si como dice #!drvy también puedes poner

Código
  1. .done(alert);

Que no hay necesidad de la función anónima extra.

Muchas gracias voy a ver que onda con eso!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines