我应该在哪里添加csrf令牌



我真的不明白这个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">&times;</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令牌时遇到了问题。

要在视图中利用CSRF保护,请执行以下步骤:

  1. 默认情况下,CSRF中间件在MIDDLEWARE设置中激活。如果您覆盖该设置,请记住'django.middleware.csrf.CsrfViewMiddleware'应位于任何查看假设CSRF攻击已得到处理的中间件
  2. 如果禁用了它(不建议使用(,则可以在要保护的特定视图上使用csrf_protect()(请参见下文(
  3. 在任何使用POST表单的模板中,如果表单用于内部URL,请在<form>元素内使用csrf_token标记,例如:

    <form method="post">{% csrf_token %}

  4. 对于以外部URL为目标的POST表单,不应执行此操作,因为这会导致CSRF令牌泄漏,从而导致漏洞。

  5. 在相应的视图函数中,确保使用RequestContext来呈现响应,以便{% csrf_token %}能够正常工作。如果您正在使用render()函数、通用视图或contrib应用程序,则已经涵盖了这些应用程序,因为它们都使用RequestContext

注意

CSRF令牌也存在于DOM中,但前提是明确包括在模板中使用csrf_token。cookie包含规范表征;CsrfViewMiddleware将更喜欢cookie而不是DOM中的令牌。无论如何,如果该令牌存在于DOM中,因此您应该使用cookie!

和警告

警告

如果您的视图没有呈现包含csrf_token模板标记的模板,Django可能不会设置CSRF令牌cookie。这是常见于将表单动态添加到页面的情况。到针对这种情况,Django提供了一个视图装饰器,它强制cookie设置:ensure_csrf_cookie().

Jinja2模板中使用CSRF

Django的Jinja2模板后端将{{ csrf_input }}添加到所有模板的上下文中,这相当于Django模板语言中的{% csrf_token %}。例如:

<form method="post">{{ csrf_input }}

CSRF令牌始终放置在初始化表单标记之后。然后是所有的输入字段。

<form>
{% csrf_token %}
</form> 

django官方文档很清晰,请访问https://docs.djangoproject.com/en/2.2/ref/csrf/#how-使用

最新更新