在 Django 中比较 owner_id 和 request.user.id 进行身份验证是否安全?
is it safe to compare owner_id to request.user.id for authentication in django?
在我的应用程序中我有模型:
class Meal(models.Model):
name = models.CharField(max_length=100)
description = models.TextField(max_length=500)
carbohydrates = models.FloatField()
protein = models.FloatField()
fat = models.FloatField()
fiber = models.FloatField()
owner = models.ForeignKey('auth.User', on_delete=models.CASCADE)
以下序列化程序:
class MealSerializer(serializers.ModelSerializer):
class Meta:
model = Meal
fields = "__all__"
和这个视图集:
class MealViewSet(viewsets.ModelViewSet):
queryset = Meal.objects.all()
serializer_class = MealSerializer
def get_queryset(self):
return Meal.objects.filter(owner_id=self.request.user.id)
现在我有一个问题,在 get_queryset
方法中比较 owner_id=self.request.user.id
是否安全?
或者是否有可能以某种方式在请求中指定 user.id 例如使用邮递员并拉取所有 Meal 对象?
例如:
Is that possible in postman or somewhere else?
我是django初学者,很少用postman。对不起,如果我写错了,英语不是我的母语。
我不确定它是否有效。在过滤器中,你必须写 owner=self.request.user
(首选且安全)。或者,如果您真的想为 ID 烦恼:owner__id=self.request.user.id
.
深入 self.request.user
字段有点危险,因为万一某些 未经身份验证的 用户到达那里 — 您的代码会崩溃。
总之,总体上比较安全。之前有人问过这个问题:Django/Auth: Can request.user be exploited and point to other user?
在我的应用程序中我有模型:
class Meal(models.Model):
name = models.CharField(max_length=100)
description = models.TextField(max_length=500)
carbohydrates = models.FloatField()
protein = models.FloatField()
fat = models.FloatField()
fiber = models.FloatField()
owner = models.ForeignKey('auth.User', on_delete=models.CASCADE)
以下序列化程序:
class MealSerializer(serializers.ModelSerializer):
class Meta:
model = Meal
fields = "__all__"
和这个视图集:
class MealViewSet(viewsets.ModelViewSet):
queryset = Meal.objects.all()
serializer_class = MealSerializer
def get_queryset(self):
return Meal.objects.filter(owner_id=self.request.user.id)
现在我有一个问题,在 get_queryset
方法中比较 owner_id=self.request.user.id
是否安全?
或者是否有可能以某种方式在请求中指定 user.id 例如使用邮递员并拉取所有 Meal 对象?
例如: Is that possible in postman or somewhere else?
我是django初学者,很少用postman。对不起,如果我写错了,英语不是我的母语。
我不确定它是否有效。在过滤器中,你必须写 owner=self.request.user
(首选且安全)。或者,如果您真的想为 ID 烦恼:owner__id=self.request.user.id
.
深入 self.request.user
字段有点危险,因为万一某些 未经身份验证的 用户到达那里 — 您的代码会崩溃。
总之,总体上比较安全。之前有人问过这个问题:Django/Auth: Can request.user be exploited and point to other user?