瀏覽代碼

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 年之前
父節點
當前提交
c075537c13
共有 1 個檔案被更改,包括 9 行新增6 行删除
  1. 9
    6
      oscar/apps/checkout/views.py

+ 9
- 6
oscar/apps/checkout/views.py 查看文件

@@ -96,9 +96,9 @@ class ShippingAddressView(CheckoutSessionMixin, FormView):
96 96
     automatically converted into a SHIPPING address when the user checks out.
97 97
 
98 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 102
     template_name = 'checkout/shipping_address.html'
103 103
     form_class = ShippingAddressForm
104 104
 
@@ -136,13 +136,16 @@ class ShippingAddressView(CheckoutSessionMixin, FormView):
136 136
 
137 137
     def post(self, request, *args, **kwargs):
138 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 144
                 # User has selected a previous address to ship to
143 145
                 self.checkout_session.ship_to_user_address(address)
144 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 149
                 address.delete()
147 150
                 messages.info(self.request, _("Address deleted from your address book"))
148 151
                 return HttpResponseRedirect(reverse('checkout:shipping-method'))

Loading…
取消
儲存