作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Django 3.0 release notes ,此评论是关于 url_has_allowed_host_and_scheme
:
To avoid possible confusion as to effective scope, the private internal utility
is_safe_url()
is renamed tourl_has_allowed_host_and_scheme()
. That a URL has an allowed host and scheme doesn’t in general imply that it’s “safe”. It may still be quoted incorrectly, for example. Ensure to also useiri_to_uri()
on the path component of untrusted URLs.
url_has_allowed_host_and_scheme
的目的是什么是。以提供
next
的常见用例为例。查询参数,例如:
http://example.com/foobar?next=http%3A%2F%2Fexample2.com%2Fhello .您可以对处理此路径的 View 进行编程以重定向到
next
提供的 URL。参数,在这种情况下:
url_has_allowed_host_and_scheme
以确保 URL 具有预期的主机名和方案。
iri_to_uri
.该文档暗示您还需要使用此功能。我什么时候需要使用它?
最佳答案
以下是实现安全重定向的方法:
from django.utils.http import url_has_allowed_host_and_scheme
from django.utils.encoding import iri_to_uri
from django.shortcuts import redirect
def example_view(request):
if url_has_allowed_host_and_scheme(request.GET['next'], None):
url = iri_to_uri(request.GET['next'])
return redirect(url)
else:
raise
iri_to_uri
部分是确保正确引用最终结果 URL 所必需的。例如:
request.GET['next']
等于 '/café/'
iri_to_uri(request.GET['next'])
等于 '/caf%C3%A9/'
GET /caf%C3%A9/ HTTP/1.0
URL 需要在那里转义,因为如果它包含空格之类的东西,它会破坏 HTTP 协议(protocol)。
iri_to_uri
是必需的,因为 Django 的实用程序如
redirect
在它到达 HTTP 请求中的线路之前,将根据需要自动转义 URL。
关于django - 在 Django 中使用 url_has_allowed_host_and_scheme 后什么时候需要使用 iri_to_uri?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60372946/
在 Django 3.0 release notes ,此评论是关于 url_has_allowed_host_and_scheme : To avoid possible confusion as
我是一名优秀的程序员,十分优秀!