cesar hace 6 años
Consultas seguras con variables en Eloquent
Hola Alex, el sabado pasado, en el vivo de yutube te hice una pregunta y no me quedo clara la respuesta, pensé que podría ver el video después, y me pediste que lo pusiera en este foro, asique aqui voy.
La pregunta es, Como realizar consultas seguras en Eloquent con variables que vengan de una consulta a mi servicio API?
Esto es: en la petición a mi servicio api, vendran $datos que se deben consultar a la base de datos, y luego con esos datos calcular un valor que se debe devolver, con otros valores informativos.
Asique esos $datos que se consulten que vienen en la consulta se podrían usar para inyectar código.
por ejemplo la consulta eloquent sería:
```
Petición { $condicion1, $condicion2, $unidades }
$TipoTarifa = App\TablaDeTarifas::where([
['COLUMNA1', '=', $condicion1],
['COLUMNA2', '=', $condicion2],
])->value('columna3'); //tipo de tarifa
//ahora buscar en otra tabla
$RangoDePrecios = App\CalculoPrecio::where([
['columna1', '=', $TipoTarifa],
['columna2', '=', $condicion1],
['columna3', '=', $condicion2],
])->first();
//luego de $RangoDePrecio obtengo datos que necesito
$t2= $precio->column2;
$t3= $precio->column3;
$t4= $precio->columna4;
$t5= $precio->columna5;
$t6= $precio->columna6;
if ($unidades <= 1){$RangoCorrecto =$t2;}
elseif ($unidades>=2.1 && $unidades<3){$RangoCorrecto=$t3;}
elseif ($unidades>3.1 && $unidades<4){$RangoCorrecto=$t4;}
elseif ($unidades>=4.1 && $unidades<5){$RangoCorrecto=$t5;}
elseif ($unidades>=5.1 && $unidades<6){$RangoCorrecto=$t6;}
$result = $unidades * $RangoCorrecto;
return response()->json($result);
```
Esa sería la logica que estaria en el controlador (no se sí se puede hacer de alguna manera mas eficiente) para hacer el cálculo y devolver la respuesta. por eso quiero hacer las consultas evitando alguna injección.
Hablaste de validator() y proteccion con CSFR, pero como en cada variable son muchos los datos posibles, tendría qe poner muuuchos validadores, y pueden hacer la consulta mas pesada, si tienes alguna recomendación te la agradecería muchisimo.
Muchas Gracias por tu respuesta.
Responder 1 respuesta
Que tal César,
Tal vez podrías echar mano de los "array validators" que se pueden usar en Laravel, si todos tus datos vinieran en un arreglo podrías usar algo como lo descrito aquí: [https://laravel.com/docs/5.7/validation#validating-arrays](https://laravel.com/docs/5.7/validation#validating-arrays).
Ahora bien para mandar mensajes personalizados, ahí si no hay otra forma de evitar tener configuraciones individuales.
Saludos.
Por favor inicia sesión para participar en esta pregunta