Nella gestione delle entità in Parse ci sono molti oggetti che devo legare all'utente attualmente loggato.Sicurezza oggetto in Parse utilizzando l'API JavaScript - Collegamento degli utenti agli oggetti salvati
Le mie preoccupazioni sono:
- non esiste un codice di backend assicurando che la
User
vengono passati è l'attuale utente connesso. - Gli utenti possono assegnare qualsiasi nuovo oggetto creato ad altri utenti.
Hanno this example TODO app che a the documentation non mostra alcun codice cloud in atto per garantire che il User
che il Todo
viene assegnato è l'utente attualmente connesso.
Ora che guardo attraverso the code Sto iniziando a pensare che ogni volta che un oggetto viene salvato viene legato all'utente. Qualcuno può spiegare perché questa applicazione funziona e come sta associando i Todo
s allo User
?
UPDATE: Nevermind, ho trovato il posto nel loro codice in cui si specifica l'utente da salvare per il Todo. La mia domanda è, che cosa sta impedendo a un utente di scrivere codice che salva il todo con l'id utente di qualcun altro?
this.todos.create({
content: this.input.val(),
order: this.todos.nextOrder(),
done: false,
user: Parse.User.current(),
ACL: new Parse.ACL(Parse.User.current())
});
UPDATE # 2: Se l'oggetto ha un User
ACL
insieme a consente solo agli utenti di essere in grado di leggere User
oggetti di loro proprietà, allora non sarebbero in grado di interrogare di ottenere un altro oggetto utente a lascia perdere. Tuttavia, ci sono altri due possibili problemi:
- È possibile per loro di passare l'objectId dell'utente anziché l'intero oggetto
User
anche se il campouser
sulTodo
s tabella richiede un_User
? - Credo che potrebbero anche creare un nuovo oggetto utente e assegnarlo a quello ... Sto cercando di pensare a uno scenario in cui questo sarebbe un problema, ma non posso ora.
Se qualcuno può confermare o fornire soluzioni a uno di quelli che potrebbero essere utili. Andando a provare a testare # 1 in questo momento.
UPDATE # 3 - Dopo alcuni test:
- Se il campo
user
sulTodo
s tavolo richiede un oggetto_User
, non ci vorrà l'objectId come una stringa. Essi possono tuttavia creare un nuovo oggetto utente e impostare l'oggetto lì per aggirare questo.
var user = new Parse.User(); // Create user object user.id = "cqmEuj1Bzf"; // Assign user id // Create and save Todo var td = new Todo(); td.set("name", "Some ting todo"); td.set("user", user); td.save();
Questo qui è esattamente quello che ero preoccupato. Sono riuscito a salvare con successo un Todo nell'account di un altro utente - a condizione che conosca il proprio user_id (objectId
).Con un numero sufficiente di utenti, è probabile che ne indovinino almeno uno per rovinare casualmente l'account di qualcuno.
Quindi, adesso?
Risposta: Utilizzare il codice cloud per verificare che l'utente passato corrisponda all'utente corrente. La risposta è stata pubblicata su Parse's forums here.
Hey ho diviso il trovare nella propria risposta per rendere più facile da trovare, quindi lo stile. – Diogenes