W podmiotów zarządzających w Parse istnieje wiele obiektów, które muszę związać się aktualnie zalogowanego użytkownika.obiektu Bezpieczeństwo w Parse używając API JavaScriptu - Wiązanie użytkowników do obiektów, które są zapisywane
Moje obawy są:
- Nie ma kodu backend zapewnienie, że
User
były przekazywane w jest bieżący zalogowany użytkownik. - Użytkownicy mogą przypisywać żadnych nowo utworzonych obiektów do innych użytkowników.
Mają this example TODO app który nie wykazuje w the documentation kod chmura w celu zapewnienia, że User
że Todo
jest przypisany jest aktualnie zalogowany użytkownik.
Teraz, gdy patrzę przez the code Zaczynam myśleć, że gdy obiekt zostanie zapisany pobiera przywiązane do użytkownika. Czy ktoś może wyjaśnić, dlaczego ta aplikacja działa i jak to jest kojarzenie z s z User
?
AKTUALIZACJA: Nieważne, znalazłem to miejsce w ich kodzie, w którym określają użytkownika, aby zapisać do Todo. Moje pytanie brzmi, co powstrzymuje użytkownika przed pisaniem kodu, który zapisuje todo z czyimś id użytkownika?
this.todos.create({
content: this.input.val(),
order: this.todos.nextOrder(),
done: false,
user: Parse.User.current(),
ACL: new Parse.ACL(Parse.User.current())
});
Aktualizacja # 2: Jeśli obiekt User
ma ACL
ustawiony tylko pozwala, aby móc czytać User
obiektów są właścicielami, to nie będzie w stanie do kwerendy, aby uzyskać inny obiekt użytkownika do przepuszczać. Jednakże istnieją dwie inne możliwe problemy:
- Czy to możliwe, by zdać objectID użytkownika, zamiast całego
User
obiektu nawet jeśli poleuser
na terenieTodo
s tabeli wymaga_User
? - wierzę mogliby również utworzyć nowy obiekt użytkownika i przypisać go do ... Staram się myśleć o sytuacji, w której byłoby to problemem, ale nie mogę teraz.
Jeśli ktoś może potwierdzić lub dostarczyć rozwiązania którekolwiek z tych, które byłyby pomocne. Teraz spróbuję przetestować # 1.
Aktualizacja # 3 - Po pewnym testów:
- Jeśli pole
user
na terenieTodo
s tabeli wymaga_User
obiekt, to nie będzie miało objectID jako ciąg znaków. puszki one jednak utworzyć nowy obiekt użytkownika i ustawić objectID tam, aby obejść ten problem.
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();
To właśnie tutaj jest dokładnie to, co byłem zaniepokojony. udało mi się z powodzeniem zapisać Todo na konto innego użytkownika --as ile znam ich user_id (objectId
).Przy wystarczającej liczbie użytkowników prawdopodobnie odgadną co najmniej jedno, by przypadkowo zepsuło czyjeś konto.
Co teraz?
Odpowiedź: Użyj Cloud Code, aby sprawdzić, czy użytkownik przekazany odpowiada aktualnemu użytkownikowi. Odpowiedź została opublikowana na Parse's forums here.
Hej podzielić znalezisko do własnej odpowiedzi łatwiej znaleźć tak styl. – Diogenes