Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Leguim

#561
No quiero que pase esto...

Función JS:
Código (javascript) [Seleccionar]

function Enviar_Mensaje(cadena, user)
{
      // cadena = Mensaje que enviará
      // user = id del usuario el cual recibirá dicho mensaje

      $.ajax({
      // etc
      })

      .done({
       // etc
      })
}


Después va a la consola del navegador y escribe "Enviar_Mensaje('123', 7);"
Esto no tiene porque ser un problema de seguridad, para nada... pero ahora imaginate que nose alguna función lo que haga sea dar un rango administrativo "Hacer_Admin(id_user);" se escriba su ID... por supuesto puedo preguntar antes siempre si la persona que esta queriendo dar admin a alguien es un admin.. pero lo que quiero que vean es la vulnerabilidad que existe y que por eso quiero hacer eso.. Pero como no es recomendable hacerlo estoy tratando de obtener la url de la pagina que llamo al fichero.. por supuesto esto no arregla el problema simplemente es una cerradura más.. me queda revisar fichero por fichero y validar todo con php antes de realizar cualquier cosa.

La solución a mi tema es obtener la url desde JS y enviarla por parametro y usarlo en el fichero ajax pero estamos en la misma porque cualquiera puede editar eso.
#562
Por razones de seguridad no me gusta nada que los usuarios puedan ejecutar funciones js y mucho menos que entre esas funciones js se puedan usar las funciones que llaman a archivos ajax. Por eso quiero saber desde que paginas se llaman a los archivos o peticiones ajax y decidir si permitirlos o no. Por supuesto esto no me hace la aplicación más segura con esto. Pero si me parece que me puede ayudar mucho.
#563
Buenas noches a todos!

Estaba haciendo un sistema nuevo pero me estanque en un tema, digamos tengo un botón en mi pagina.php que al tocarlo realiza una función (JS) -> que va a llamar a un fichero_ajax.php (ajax)

Correcto... Cuando quiero obtener la URL de la pagina.php  con PHP de la siguiente manera:

En fichero_ajax.php
Código (php) [Seleccionar]

$url = $_SERVER["PHP_SELF"];


Me va a devolver "/pagina/ajax/fichero_ajax.php"
pero yo necesito que me devuelva "/pagina/pagina.php"

Es decir la "URL" de la pagina desde donde se llamo la función JS -> que conecta con el archivo ajax

Muchas gracias!
#564
¡Muchas gracias! voy a hacer eso.
#565
Buenas noches.

¿Existe alguna manera de que los usuarios no puedan usar funciones JS en la consola del navegador o que no puedan editar parametros si es que las funciones tienen?
#566
Cita de: MinusFour en 17 Agosto 2019, 22:53 PM
La diferencia es que regresarías el string sin los <script>s:

Código (php) [Seleccionar]

alert('<?php echo($_POST['resultado_suma']); ?>');


Y en tu código:

Código (js) [Seleccionar]

    .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 (javascript) [Seleccionar]

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 (javascript) [Seleccionar]

var resultado_suma = Number(valor_a) + Number(valor_b);


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

Código (php) [Seleccionar]

echo($_POST['resultado_suma']);


Y tu javascript solo tiene que hacer esto:

Código (javascript) [Seleccionar]
.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 (javascript) [Seleccionar]

.done(alert);


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

Muchas gracias voy a ver que onda con eso!
#567
Cita de: WHK 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.

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!
#568
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 (javascript) [Seleccionar]

var valor_a = 3;
var valor_b = 4;

Sumar(valor_a, valor_b);


La función Sumar:
Código (javascript) [Seleccionar]

function Sumar(value_a, value_b)
{
     var resultado_suma = valor_a + valor_b;
    $.ajax({
         url: 'archivo_ajax.php',
 type: 'POST',
 dataType: 'html',
 data: {resultado_suma},
    })

    .done(function(results)
    {
 $('body').html(results);
    })
}


Fichero ajax.php:
Código (php) [Seleccionar]

?>
<script type="text/javascript>
alert('<?php echo($_POST['resultado_suma']); ?>');
</script>
<?php


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!
#569
hola!

La petición la hago en > el ficheroajax.php

al inicio del fichero pregunto la cantidad total.

Pagina cargada -> realiza una consulta preguntando $cantidad_total
Ajax.js -> Hago una operación cantidad_disponible = cantidad_total - cantidad_vista;
Si la cantidad disponible > 0 se va a permitir usar dicha función .js

Es este el control:
Código (javascript) [Seleccionar]

function More(cantidad_total, cantidad_vista)
{
  var cantidad_disponible = cantidad_total - cantidad_vista;

  if(cantidad_disponible > 0)
  {
document.body.style.cursor = "progress";
  }

  $.ajax({
       url: 'ajax/ficheroajax.php',
type: 'POST',
dataType: 'html',
data: {cantidad_vista},

success: function() {
      document.body.style.cursor = "default";
}
   })

   .done(function(resultados)
   {
  if(cantidad_disponible > 0)
    {
$('.mostrador).html(resultados);
  }
   })
}


ficheroajax.php -> vuelve a realizar una consulta preguntando $cantidad_total, y hace lo que dije antes elimina el evento click y crea uno nuevo con la cantidad total actualizada que pregunte en este mismo fichero (ficheroajax.php)

Entonces siempre va a estar trabajando con datos actualizados realmente.
#570
Gracias a los dos por responder!

No me di a entender bien, disculpen. Básicamente es ir cargando datos, yo de entrada muestro 5 datos y al hacer click en x botón mostrará más datos y así sucesivamente hasta completar todos los registros disponibles. Es interesante el sistema que dijiste de ir mostrando un anuncio por cada tanda de datos que se muestra pero no era lo que quería. Me explique muy mal seguramente..

Imaginemos que para el momento en que la pagina ya fue cargada yo ya tengo 5 registros mostrados... okay... y en total hay 25 registros pero sólo mostrara 5 registros de entrada... ahora como hay más de 5 registros ($cantidad_total >= 6) mostrará el botón para cargar más.. voy a aplicar lo de cambiar >= por > gracias por tu consejo!

Pero ahora imaginemos que antes de haber presionado el botón de cargar más, se borraron algunos registros nose.. 7 registros se borraron... como ya se pueden estar imaginando para cuando yo use la función que esta en ajax.. usará la cantidad total de anuncios que fue cargada anteriormente es decir usará $cantidad_total = 25 un dato que es falso ya que se habían borrado 7 registros por lo que el dato real es $cantidad_total = 18

Ya creo haber encontrado la solución a esto y quería compartirla con ustedes, para saber que les parece y por si a alguien alguna vez le hace falta.

En el ficheroajax.php se debe poner el <script> renovado
Código (javascript) [Seleccionar]

$(".boton").click(function()
{
var dato = 1;
alert(dato);
});

$('.boton').unbind('click');
$(".boton").click(function()
{
var dato = 2;
alert(dato);
});


Les voy a explicar el código el primer fragmento mostrado vendría a ser el script que ya esta en la pagina cargada (no se debería poner en el ficheroajax.php
Después donde dice $('.boton').unbind('click'); sirve para eliminar un script o un evento mejor dicho entonces eliminamos ese evento y lo creamos nuevamente pero con datos actualizados... basicamente eliminas el evento desde ficheroajax.php y volves a preguntar u obtener datos actualizados copiando y pegando el script donde se llama a more_results ...

Si tu evento es un "scroll" se puede eliminar así

Código (javascript) [Seleccionar]

$(document).unbind('scroll'); // document puede cambiarse si el scroll se realiza en un div, en ese caso pondrías el id o la clase del div que tiene el scroll pero si el scroll se realiza en el body se deja así..


Estos códigos ya los probé y funcionan correctamente.
Si me quieren dar su opinión estoy abierto a criticas, y si alguien necesitó de este código pero todavía no termino de entender me puede preguntar y voy a tratar de explicarlo mejor.