Kaynağa Gözat

Security fix: any user can delete any feed

Regression introduced in commit 51fb949.
Frédéric Guillot 5 yıl önce
ebeveyn
işleme
32439ca2f0
2 değiştirilmiş dosya ile 7 ekleme ve 1 silme
  1. 1 1
      storage/feed.go
  2. 6 0
      ui/feed_remove.go

+ 1 - 1
storage/feed.go

@@ -381,7 +381,7 @@ func (s *Storage) RemoveFeed(userID, feedID int64) error {
 		}
 	}
 
-	if _, err := s.db.Exec(`DELETE FROM feeds WHERE id=$1`, feedID); err != nil {
+	if _, err := s.db.Exec(`DELETE FROM feeds WHERE id=$1 AND user_id=$2`, feedID, userID); err != nil {
 		return fmt.Errorf(`store: unable to delete feed #%d: %v`, feedID, err)
 	}
 

+ 6 - 0
ui/feed_remove.go

@@ -14,6 +14,12 @@ import (
 
 func (h *handler) removeFeed(w http.ResponseWriter, r *http.Request) {
 	feedID := request.RouteInt64Param(r, "feedID")
+
+	if !h.store.FeedExists(request.UserID(r), feedID) {
+		html.NotFound(w, r)
+		return
+	}
+
 	if err := h.store.RemoveFeed(request.UserID(r), feedID); err != nil {
 		html.ServerError(w, r, err)
 		return