Python 是否可以为Django服务器伪造HttpRequest属性
我正在使用Django编写一个web应用程序。我试图让用户看到它的个人资料,只有他自己的Python 是否可以为Django服务器伪造HttpRequest属性,python,django,http,authentication,Python,Django,Http,Authentication,我正在使用Django编写一个web应用程序。我试图让用户看到它的个人资料,只有他自己的 if(not request.user.id == request.GET.get('user_id', '')): raise PermissionDenied 我的问题是:以这种方式检查是否安全,或者聪明的孩子是否有可能以某种方式更改request.user.id中的值以匹配任何人的user\u id 用户必须先登录,然后才能使用以下命令访问此页面: user = LDAPBackend().
if(not request.user.id == request.GET.get('user_id', '')):
raise PermissionDenied
我的问题是:以这种方式检查是否安全,或者聪明的孩子是否有可能以某种方式更改request.user.id
中的值以匹配任何人的user\u id
用户必须先登录,然后才能使用以下命令访问此页面:
user = LDAPBackend().authenticate(username=username, password=password)
if(user is not None):
login(request, user)
请求。为每个请求设置用户
:
将代表当前登录用户的user
属性添加到每个传入的HttpRequest
对象
如果用户未登录,则request.user
设置为匿名用户。看一看
所以,我不知道一个聪明的孩子会如何改变登录用户的id
大多数情况下,
用户
与其配置文件之间存在一对一的关系。如果是这种情况,您可以修改查询集以直接获取请求的配置文件。用户
。请求。用户
为每个请求设置为使用:
将代表当前登录用户的user
属性添加到每个传入的HttpRequest
对象
如果用户未登录,则request.user
设置为匿名用户。看一看
所以,我不知道一个聪明的孩子会如何改变登录用户的id
大多数情况下,
用户
与其配置文件之间存在一对一的关系。如果是这种情况,您可以修改查询集以直接获取请求用户的配置文件。是的,应该是安全的
仅当使用会话cookie进行身份验证时,才会填充request.user get。除非有人偷了饼干或代币,否则这不成问题
有一件事我不明白,为什么这里需要显式传递user\u id
参数
如果您正在强制登录以查看页面。我有两种看法
/profile
直接获取请求对应的用户配置文件。用户
/
查询用户名对应的配置文件,并将其与request.user.id进行比较是,它应该是安全的
仅当使用会话cookie进行身份验证时,才会填充request.user get。除非有人偷了饼干或代币,否则这不成问题
有一件事我不明白,为什么这里需要显式传递user\u id
参数
如果您正在强制登录以查看页面。我有两种看法
/profile
直接获取请求对应的用户配置文件。用户
/
查询用户名对应的配置文件,并将其与request.user.id比较。user
已是发送请求以获取页面的当前用户的对象。您可以使用login\u required
或仅允许用户登录访问(:decorator或Mixin)
然后可以使用您的条件在函数中加载页面。例如:
=>url.py:
url(r'^profile/$', login_required(app.views.profile), name='profile'),
=>views.py:
def profile(request):
try:
myProfile = User.objects.get(username=request.user.username)
except ObjectDoesNotExist:
return render(request, "error.html", {'message' : 'No Profile Found'})
return render(request, "app/profile.html",
{'myProfile': myProfile})
这样,您只能显示您的个人资料(发送请求的用户),您需要登录
编辑:如果你不想“尝试并捕获”,你可以使用
get\u object\u或
请求。User
已经是关于发送请求以获取页面的当前用户的对象。您可以使用login\u required
或仅允许用户登录访问(:decorator或Mixin)
然后可以使用您的条件在函数中加载页面。例如:
=>url.py:
url(r'^profile/$', login_required(app.views.profile), name='profile'),
=>views.py:
def profile(request):
try:
myProfile = User.objects.get(username=request.user.username)
except ObjectDoesNotExist:
return render(request, "error.html", {'message' : 'No Profile Found'})
return render(request, "app/profile.html",
{'myProfile': myProfile})
这样,您只能显示您的个人资料(发送请求的用户),您需要登录
编辑:如果你不想“尝试并捕获”,你可以使用
get\u object\u或\u 404(用户,用户名=request.User.username)
这是一个评分应用程序,因此任何老师都可以访问任何学生的个人资料,但任何学生都只能看到自己的个人资料。这就是我明确通过学生证的原因。谢谢!这是一个评分应用程序,所以任何老师都可以访问任何学生档案,但任何学生只能看到自己的档案。这就是我明确通过学生证的原因。谢谢!