La diferencia es que regresarías el string sin los <script>s:
Y en tu código:
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:
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:
¿Pero porque? Tu servidor puede simplemente regresar el número:
Y tu javascript solo tiene que hacer esto:
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
Que no hay necesidad de la función anónima extra.
Código
alert('<?php echo($_POST['resultado_suma']); ?>');
Y en tu código:
Código
.done(function(results) { eval(results); })
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
valor_a = "", valor_b ="'); $('body').html('XSS"; 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
var resultado_suma = Number(valor_a) + Number(valor_b);
¿Pero porque? Tu servidor puede simplemente regresar el número:
Código
echo($_POST['resultado_suma']);
Y tu javascript solo tiene que hacer esto:
Código
.done(function(results) { alert(results); });
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
.done(alert);
Que no hay necesidad de la función anónima extra.
Muchas gracias voy a ver que onda con eso!