Ich benutze BreezeJS und habe eine Frage, wie Daten gespeichert werden. Hier ist mein Code und KommentareBreezeJS SaveChanges() Sicherheitsproblem
[Authorize]
/*
* I want to point out the security hole here. Any Authorized user is able to pass to this method
* a saveBundle which will be saved to the DB. This saveBundle can contain anything, for any user,
* or any table.
*
* This cannot be stopped at the client level as this method can be called from Postman, curl, or whatever.
*
* The only way I can see to subvert this attack would be to examine the saveBundle and verify
* no data is being impacted that is not owned or related directly to the calling user.
*
* Brute force could be applied here because SaveResult contains Errors and impacted Entities.
*
*/
[HttpPost]
public SaveResult SaveChanges(JObject saveBundle)
{
return _efContext.SaveChanges(saveBundle);
}
Um den Zugriff auf eine Anrufer Fähigkeit zu begrenzen, um Daten abzurufen ich zum ersten Mal von den access_token des user_id extrahieren und all meine Fragen zu beschränken, umfassen diese in einer where-Klausel, so dass es etwas unmöglich für einen Benutzer um andere Benutzerdaten abzurufen.
Aber das würde einen unberechtigten Benutzer nicht stoppen, der ein gültiges access_token vom Aufrufen von SaveChanges() in einer Brute-Force-Schleife mit inkrementellen Objekt-IDs hatte.
Bin ich auf diesem einen Weg? Vielleicht vermisse ich etwas.
Danke für jede Hilfe.
Mike
Nicht vertraut mit Brise, aber Sie klingen, als ob Sie richtige Zugangskontrolle implementieren. Es ist auch eine gute Methode kryptografische Zufälligkeit beim Generieren von Objekt-IDs zu verwenden, aber das ist sekundär, um eine korrekte Zugriffssteuerung zu implementieren. In Bezug auf SaveChanges() möchten Sie möglicherweise die Anzahl der Speichervorgänge einschränken, die der Benutzer ausführen kann - andernfalls kann er Ihre Datenbank mit Junk füllen. – TheGreatContini