Ecco il codice:Mongoide: come impedire la creazione di campi non definiti mediante assegnazione di massa?
class M
include Mongoid::Document
field :name
end
params = { name: "foo", age: 20 }
M.create(params)
#=> #<M name: "My Name", age: 20>
noti che age
non è stato definito, ma è stato salvato.
Questo è problematico (potenzialmente una fonte di DoS), perché un utente malintenzionato può aggiungere eventuali parametri in POST e campi sconosciuti con una stringa di grandi dimensioni può entrare di nascosto. (Ad es name=foo&bogus=#{'x'*1000000}
)
Finora, non ho potuto trova tutto tranne attr_accessible
, ma non è davvero eccezionale per Mongoid poiché devi mantenere gli stessi nomi di campo sia in field
sia in attr_accessible
in tutti i tempi, in tutti i modelli. Non ASCIUTTO.
Penso che l'API attr_accessible
sia ottima per ActiveRecord, perché ci sono a. non si definiscono esplicitamente i campi nei modelli (DRY) e b. è garantito che non ci sono possibilità che un campo inesistente venga salvato in RDB. Ma per Mongoid, penso che ci dovrebbe essere una soluzione migliore di attr_accessible
.
Si noti che c'è un'impostazione di configurazione globale allow_dynamic_fields
ma non si tratta di assegnazione di massa, quindi è fuori dal campo di applicazione in questa discussione, tuttavia penso che dovrebbe essere effettivamente una macro per modello e dovrebbe anche occuparsi dell'assegnazione di massa.
Come ti stai occupando di questo problema?
Hai trovato una soluzione per questo? Anch'io sto affrontando lo stesso problema. – Rohit