我真的不理解该html的大部分功能,因为我对html不满意。以及可以向我解释其中大部分内容的添加令牌的位置,将不胜感激
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Raleway">
<link rel="stylesheet" href="static/css/body.css">
<body>
<div class="bgimg w3-display-container w3-text-black">
<div class="w3-display-middle w3-jumbo">
<button class=" w3-button w3-white">HSEA STOCK</button>
</div>
<div class="w3-display-topleft w3-container w3-xlarge ">
<p><button onclick="document.getElementById('id01').style.display='block'" style="width:auto;">Login</button></p>
</div>
</div>
<div id="id01" class="modal">
<form class="modal-content animate" action="/login" method="POST">
{% csrf_token %}
<div class="imgcontainer">
<span onclick="document.getElementById('id01').style.display='none'" class="close" title="Close Modal">×</span>
</div>
<div class="container">
<label for="uname"><b>Username</b></label>
<input type="text" placeholder="Enter Username" name="username" required
<label for="psw"><b>Password</b></label>
<input type="password" placeholder="Enter Password" name="passwword" required>
<button type="submit">Login</button>
<label>
<input type="checkbox" checked="checked" name="remember"> Remember me
</label>
</div>
<div class="container" style="background-color:#f1f1f1">
<button type="button" onclick="document.getElementById('id01').style.display='none'" class="cancelbtn">Cancel</button>
<span class="psw">Forgot <a href="#">password?</a></span>
</div>
</form>
</div>
<script>
// Get the modal
var modal = document.getElementById('id01');
// When the user clicks anywhere outside of the modal, close it
window.onclick = function(event) {
if (event.target == modal) {
modal.style.display = "none";
}
}
</script>
</body>
很抱歉,如果该接缝非常明显,但是我没有进入此页面,并且我在为django添加csrf令牌时遇到麻烦。
答案 0 :(得分:1)
要在视图中利用 CSRF 保护,请执行以下步骤:
MIDDLEWARE
中激活了CSRF中间件
设置。如果您覆盖该设置,请记住
'django.middleware.csrf.CsrfViewMiddleware'
应该先于
查看假定已处理CSRF攻击的中间件。csrf_protect()
。在使用POST表单的任何模板中,如果表单适用于以下形式,请在 csrf_token
元素内使用 <form>
标记内部网址,例如:
<form method="post">{% csrf_token %}
对于以外部URL为目标的 POST 表单,不应这样做,因为这会导致CSRF令牌泄漏,从而导致漏洞。
在相应的视图功能中,确保使用 RequestContext
呈现响应,以便 {% csrf_token %}
可以正常工作。如果您使用的是 render()
功能,常规视图或Contrib应用程序,那么您已经被覆盖,因为它们全部使用 RequestContext
。
注意
CSRF令牌也存在于DOM中,但前提是明确 包含在模板中使用
csrf_token
。 Cookie包含 规范令牌CsrfViewMiddleware
比起 DOM中的令牌。无论如何,如果 令牌存在于DOM中,因此您应该使用cookie!
警告
警告
如果您的视图未呈现包含
csrf_token
的模板 模板标记,Django可能未设置CSRF令牌cookie。这是 在将表单动态添加到页面的情况下很常见。至 为了解决这种情况,Django提供了一个视图装饰器 Cookie的设置:ensure_csrf_cookie().
在 Jinja2 模板中使用 CSRF
Django的 Jinja2 模板后端将 {{ csrf_input }}
添加到所有模板的上下文中,这等效于 {% csrf_token %}
Django模板语言。例如:
<form method="post">{{ csrf_input }}
答案 1 :(得分:0)
CSRF令牌始终放置在初始化表单标签之后。然后是所有输入字段。
<form>
{% csrf_token %}
</form>
答案 2 :(得分:0)
django的官方文档很清楚,请在以下位置查看 https://docs.djangoproject.com/en/2.2/ref/csrf/#how-to-use-it