Stavo cercando di capire la possibilità di SQLi in un'applicazione Rails, che attualmente sto verificando per un client, che utilizza Active Record 4.2.0.
Ora, ho esperienza limitata con RoR quindi ti prego di sopportare con me questo. Mentre guardi attraverso una query del modulo:
@order = Order.find_by(external_order_id: params['id'], source_user_id: @user.id) if params['id'].present?
e passando attraverso più avvisi di sicurezza sulla sicurezza RoR, (come RoRo Security Cheat Sheet ) Capisco che il metodo find_by di Active Record potrebbe essere pericoloso da usare.
Ora, per comprendere meglio questo fatto, ho anche provato a scorrere i registri delle applicazioni per vedere qual è la query SQL esatta che si forma quando viene colpito il codice del record attivo sopra. Dalla mia analisi lo capisco params ['id'] è l'input dell'utente che diventa parte della query SQL sottostante direttamente. Tuttavia, se provo a iniettare un payload SQLi in questo parametro, le virgolette singole vengono scappate come \ "
Ora alcune letture successive hanno rivelato che Active Record evita l'input dell'utente ( Si prega di correggermi se ho torto qui )
Quindi, se quanto sopra è il caso, significa che l'uso di find_by, come nel caso precedente, è completamente sicuro. O non lo è? In caso contrario, quali potrebbero essere i possibili bypass per l'escape implementato da Active Record? O c'è un altro carico utile che potrebbe aiutarmi a dimostrare che SQLi è possibile con il metodo find_by come sopra, come menzionato nel cheat sheet linkato sopra.