Foros del Web » Programando para Internet » Javascript »

Problema de seguridad

Estas en el tema de Problema de seguridad en el foro de Javascript en Foros del Web. Tengo un problema en mi web, los usuarios le dan a un boton para confirmar un intercambio y que se les de una cantidad de ...
  #1 (permalink)  
Antiguo 13/06/2016, 14:47
 
Fecha de Ingreso: septiembre-2015
Mensajes: 6
Antigüedad: 8 años, 8 meses
Puntos: 0
Problema de seguridad

Tengo un problema en mi web, los usuarios le dan a un boton para confirmar un intercambio y que se les de una cantidad de coins, el problema es que si abren dos ventanas y dan dos veces rapido al boton se lo da dos veces, el codigo cuestion es este
Código HTML:
  $("#confirmButton").on("click", function() {
        inlineAlert("", "Confirming trade offer - please wait...");
        $this = $(this);
        $this.prop("disabled", true);
        var tid = $this.data("tid");
        $.ajax({
            url: "/confirm",
            type: "GET",
            data: {
                "tid": tid
            },
            success: function(data) {
            	console.log(data);
                try {
                    data = JSON.parse(data);
                    if (data.success) {
                        if (data.action == "accept") {
                            inlineAlert("success", data.result);
                        } else {
                            inlineAlert("cross", data.result);
                        }
                        $("#offerPanel").slideUp();
                    } else {
                        inlineAlert("error", data.error);
                        if (data.count > 0) {
                            cmdm();
                        }
                    }
                } catch (err) {
                    inlineAlert("error", "Javascript error: " + err);
                }
            },
            error: function(err) {
                inlineAlert("error", "AJAX error: " + err.statusText);
            },
            complete: function() {
                $this.prop("disabled", false);
            }
        });
        return false;
He pensado muchas cosas como hacer que compruebe la ip o algo asi, pero no se como hacerlo realmente.
  #2 (permalink)  
Antiguo 14/06/2016, 00:49
 
Fecha de Ingreso: mayo-2014
Mensajes: 44
Antigüedad: 10 años
Puntos: 10
Respuesta: Problema de seguridad

Por javascript no creo que vayas a poder. Lo normal sería que en servidor comprobaras si ya le has dado esos coins a ese usuario en un intervalo de tiempo muy corto, y si es así no volver a dárselo.
  #3 (permalink)  
Antiguo 14/06/2016, 11:39
 
Fecha de Ingreso: septiembre-2015
Mensajes: 6
Antigüedad: 8 años, 8 meses
Puntos: 0
Respuesta: Problema de seguridad

Cita:
Iniciado por leugimsiul Ver Mensaje
Por javascript no creo que vayas a poder. Lo normal sería que en servidor comprobaras si ya le has dado esos coins a ese usuario en un intervalo de tiempo muy corto, y si es así no volver a dárselo.
Creo que ya lo he arreglado con este codigo, el unico problema es que si lo hacen a la vez desde dos ips diferentes si pueden hacerlo, pero no estoy seguro :s
Código HTML:
var ips = {};
app.get('/checkTrade/', function (req, res) {
     if(ips[req.connection.remoteAddress]+15 >= time()) {
      return;
     } else {
      ips[req.connection.remoteAddress] = time();
     }
	var tid = req.query['tid'];
	offers.getOffer({
		tradeofferid: tid
	}, function(err, trade) {
		if(err) {
			logger.error('Error checking trade');
			logger.debug(err);
			res.json({
				success: false,
				error: err.toString()
			});
		} else {
			logger.debug(trade);
			if(trade.response.offer.trade_offer_state == 3) {
				res.json({
					success: true,
					action: 'accept',
					result: 'Coins have been added to your balance'
				});
			} else if(trade.response.offer.trade_offer_state == 7) {
				res.json({
					success: true,
					result: 'You are declined trade',
					action: 'cross'
				});
			} else {
				res.json({
					success: false,
					error: 'You are not accept trade'
				});
			}
		}
	});
});
  #4 (permalink)  
Antiguo 16/06/2016, 03:08
 
Fecha de Ingreso: mayo-2014
Mensajes: 44
Antigüedad: 10 años
Puntos: 10
Respuesta: Problema de seguridad

Por supuesto que pueden hacerlo, y no hace falta que sean dos ips diferentes, con que sean dos navegadores diferentes valdría, o incluso te digo más, con que sea desde una ventana normal de navegador y otra de incógnito del mismo navegador, ya podría.

Como te decía, no creo que consigas lo que quieres con javascript. Optaría por el lado servidor.

Saludos.
  #5 (permalink)  
Antiguo 18/06/2016, 17:25
Avatar de aukun  
Fecha de Ingreso: febrero-2015
Mensajes: 10
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: Problema de seguridad

bueno si se puede en primer lugar desde javascript mediante localStorage y desde php mediante $_session pones contadores con ello podras anotar las veces que ejecutan ese html y ese php y puedes poner otras variables booleanas que te indiquen en que situacion esta el usuario y si es correcto lo que hace o deja de hacer, i con ello evitas multiplicidades, y tambien puedes poner contadores en las bases de datos que eviten esas multiplicidades. En el caso de utilizar dos browsers, en la base de datos creas un booleano por ejemplo, --> conectado/no_conectado --> si se loguea un usuario que ya esta conectado deniegas su acceso, si se loguea alguien que no esta conectado abres el acceso. respecto a guardar la ip mediante $_server tambien es una buena medida incluso si ejecutas wireshark desde consola atraves de php para conseguir la MAC de la tarjeta de red del usuario. La manera correcta es que cada unica accion quede registrada, otra estrategia es cuando hace el objeto boton onclick hacer un contador en ese evento de manera que queda registrado los clicks que hace el boton y filtras mediante condicional permitiendo el envio de datos solo si el contador es 1 no mas de 1.
  #6 (permalink)  
Antiguo 20/06/2016, 00:55
 
Fecha de Ingreso: mayo-2014
Mensajes: 44
Antigüedad: 10 años
Puntos: 10
Respuesta: Problema de seguridad

Cita:
Iniciado por aukun Ver Mensaje
bueno si se puede en primer lugar desde javascript mediante localStorage y desde php mediante $_session pones contadores con ello podras anotar las veces que ejecutan ese html y ese php y puedes poner otras variables booleanas que te indiquen en que situacion esta el usuario y si es correcto lo que hace o deja de hacer, i con ello evitas multiplicidades, y tambien puedes poner contadores en las bases de datos que eviten esas multiplicidades. En el caso de utilizar dos browsers, en la base de datos creas un booleano por ejemplo, --> conectado/no_conectado --> si se loguea un usuario que ya esta conectado deniegas su acceso, si se loguea alguien que no esta conectado abres el acceso. respecto a guardar la ip mediante $_server tambien es una buena medida incluso si ejecutas wireshark desde consola atraves de php para conseguir la MAC de la tarjeta de red del usuario. La manera correcta es que cada unica accion quede registrada, otra estrategia es cuando hace el objeto boton onclick hacer un contador en ese evento de manera que queda registrado los clicks que hace el boton y filtras mediante condicional permitiendo el envio de datos solo si el contador es 1 no mas de 1.
Lo que decía, NO se puede desde javascript. Debes irte a la parte servidor (PHP, Base de Datos, etc, etc).

Saludos.

Etiquetas: ajax, js, seguridad
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:06.