Selaa lähdekoodia

Fix security issue in checkout shipping address view

A user is able to select another user's address for shipping to.  Bad.
master
David Winterbottom 13 vuotta sitten
vanhempi
commit
c075537c13
1 muutettua tiedostoa jossa 9 lisäystä ja 6 poistoa
  1. 9
    6
      oscar/apps/checkout/views.py

+ 9
- 6
oscar/apps/checkout/views.py Näytä tiedosto

96
     automatically converted into a SHIPPING address when the user checks out.
96
     automatically converted into a SHIPPING address when the user checks out.
97
 
97
 
98
     Alternatively, the user can enter a SHIPPING address directly which will be
98
     Alternatively, the user can enter a SHIPPING address directly which will be
99
-    saved in the session and saved as a model when the order is sucessfully submitted.
99
+    saved in the session and later saved as ShippingAddress model when the order
100
+    is sucessfully submitted.
100
     """
101
     """
101
-
102
     template_name = 'checkout/shipping_address.html'
102
     template_name = 'checkout/shipping_address.html'
103
     form_class = ShippingAddressForm
103
     form_class = ShippingAddressForm
104
 
104
 
136
 
136
 
137
     def post(self, request, *args, **kwargs):
137
     def post(self, request, *args, **kwargs):
138
         # Check if a shipping address was selected directly (eg no form was filled in)
138
         # Check if a shipping address was selected directly (eg no form was filled in)
139
-        if self.request.user.is_authenticated and 'address_id' in self.request.POST:
140
-            address = UserAddress._default_manager.get(pk=self.request.POST['address_id'])
141
-            if 'action' in self.request.POST and self.request.POST['action'] == 'ship_to':
139
+        if self.request.user.is_authenticated() and 'address_id' in self.request.POST:
140
+            address = UserAddress._default_manager.get(pk=self.request.POST['address_id'],
141
+                                                       user=self.request.user)
142
+            action = self.request.POST.get('action', None)
143
+            if action == 'ship_to':
142
                 # User has selected a previous address to ship to
144
                 # User has selected a previous address to ship to
143
                 self.checkout_session.ship_to_user_address(address)
145
                 self.checkout_session.ship_to_user_address(address)
144
                 return HttpResponseRedirect(self.get_success_url())
146
                 return HttpResponseRedirect(self.get_success_url())
145
-            elif 'action' in self.request.POST and self.request.POST['action'] == 'delete':
147
+            elif action == 'delete':
148
+                # Delete the selected address
146
                 address.delete()
149
                 address.delete()
147
                 messages.info(self.request, _("Address deleted from your address book"))
150
                 messages.info(self.request, _("Address deleted from your address book"))
148
                 return HttpResponseRedirect(reverse('checkout:shipping-method'))
151
                 return HttpResponseRedirect(reverse('checkout:shipping-method'))

Loading…
Peruuta
Tallenna