【问题标题】:is it safe to compare owner_id to request.user.id for authentication in django?在 django 中将 owner_id 与 request.user.id 进行身份验证比较安全吗?
【发布时间】:2021-11-18 15:41:46
【问题描述】:

在我的应用中,我有模型:

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 的初学者,很少使用邮递员。对不起,如果我写错了,英语不是我的母语。

【问题讨论】:

标签: django django-rest-framework


【解决方案1】:

我不确定它是否会起作用。在过滤器中,您必须编写owner=self.request.user(首选且安全)。或者,如果您真的想打扰 ID:owner__id=self.request.user.id

潜入self.request.user 字段有点危险,因为万一某些未经身份验证的用户到达那里-您的代码将会崩溃。

【讨论】:

    【解决方案2】:

    简而言之,一般来说比较是安全的。之前有人问过这个问题:Django/Auth: Can request.user be exploited and point to other user?

    【讨论】:

      猜你喜欢
      • 2016-05-21
      • 2021-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-08
      • 2013-05-09
      相关资源
      最近更新 更多