2012-11-07 10 views
8

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ą:

  1. Nie ma kodu backend zapewnienie, że User były przekazywane w jest bieżący zalogowany użytkownik.
  2. 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:

  1. Czy to możliwe, by zdać objectID użytkownika, zamiast całego User obiektu nawet jeśli pole user na terenie Todo s tabeli wymaga _User?
  2. 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:

  1. Jeśli pole user na terenie Todo s tabeli wymaga _User obiekt, to nie będzie miało objectID jako ciąg znaków.
  2. 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.

+0

Hej podzielić znalezisko do własnej odpowiedzi łatwiej znaleźć tak styl. – Diogenes

Odpowiedz

1

Możesz użyć kodu w chmurze, aby sprawdzić, czy użytkownik przekazany odpowiada bieżącemu użytkownikowi. Ta odpowiedź została opublikowana na Parse's forums here.

można użyć kodu Cloud zapewnia, że ​​objectID odpowiada bieżącego użytkownika podejmowania tego żądania. W rzeczywistości nasza przykładowa aplikacja, Anypic, sprawdza to w klasie "Zdjęcie" i "Aktywność".

z kodu chmurze Anypic za:

Parse.Cloud.beforeSave('Activity', function(request, response) { var currentUser = Parse.User.current(); var objectUser = request.object.get('fromUser'); 

    if(!currentUser || !objectUser) { 
    response.error('An Activity should have a valid fromUser.'); } else if (currentUser.id === objectUser.id) { 
    response.success(); } else { 
    response.error('Cannot set fromUser on Activity to a user other than the current user.'); } }); 

Parse.Cloud.beforeSave('Photo', function(request, response) { var currentUser = Parse.User.current(); var objectUser = request.object.get('user'); 

    if(!currentUser || !objectUser) { 
    response.error('A Photo should have a valid user.'); } else if (currentUser.id === objectUser.id) { 
    response.success(); } else { 
    response.error('Cannot set user on Photo to a user other than the current user.'); } }); 
Powiązane problemy