ajax跨站请求伪造
用ajax提交数据到后台:
{#<!DOCTYPE html>#}
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="/static/jquery-3.2.1.min.js"></script>
<style>
.sp{
color: red;
}
</style>
</head>
<body>
<p>姓名:<input type="text"></p>
<p>密码:<input type="password"></p>
<p>
<button class="sub">提交</button><span class="sp"></span>
</p>
<script>
function foo() {
$(".sp").html("");
}
$(".sub").click(function () {
$.ajax({
url: "/demo_ajax/",
type: "POST",
data: {
username: $(":text").val(),
password: $(":password").val()
},
success: function (data) {
var data = JSON.parse(data);
if (!data["flag"]){
$(".sp").html("用户名或密码错误"),
setTimeout(foo,3000)
}
}
})
})
</script>
</body>
</html>
前端采取这种方式提交会报forbidden的错误是因为没有加csrf_token,可是这个不是采用form表单的方式提交的:

怎么解决这种问题呢?一般来说解决这种问题的办法有三种,下边就说一下这三种方式都怎么用:
方式一:
在提交ajax请求的时候给他事先设置一个值:
function foo() {
$(".sp").html("");
}
$(".sub").click(function () {
#######################################
$.ajaxSetup({
data: {csrfmiddlewaretoken: '{{ csrf_token }}'}
});
#######################################
$.ajax({
url: "/demo_ajax/",
type: "POST",
data: {
username: $(":text").val(),
password: $(":password").val()
},
success: function (data) {
var data = JSON.parse(data);
if (!data["flag"]){
$(".sp").html("用户名或密码错误"),
setTimeout(foo,3000)
}
}
})
})
方式二:
body部分:
<form action="">
{% csrf_token %}
<p>姓名:<input type="text"></p>
<p>密码:<input type="password"></p>
</form>
<p>
<button class="sub">提交</button><span class="sp"></span>
</p>
button要写在外边,否则会默认以get提交
----------------------------------------------------------------------------------------
这里是js代码:
function foo() {
$(".sp").html("");
}
$(".sub").click(function () {
$.ajax({
url: "/demo_ajax/",
type: "POST",
data: {
username: $(":text").val(),
password: $(":password").val(),
csrfmiddlewaretoken:$("[name='csrfmiddlewaretoken']").val(),
},
success: function (data) {
var data = JSON.parse(data);
if (!data["flag"]){
$(".sp").html("用户名或密码错误"),
setTimeout(foo,3000)
}
}
})
})
方式三:
function foo() {
$(".sp").html("");
}
$(".sub").click(function () {
$.ajax({
url: "/demo_ajax/",
type: "POST",
headers:{"X-CSRFToken":$.cookie('csrftoken')},
data: {
username: $(":text").val(),
password: $(":password").val()
},
success: function (data) {
var data = JSON.parse(data);
if (!data["flag"]){
$(".sp").html("用户名或密码错误"),
setTimeout(foo,3000)
}
}
})
})
方式三可以在form表单提交,也可以不在form表单中提交:
ajax跨站请求伪造的更多相关文章
- 跨站请求伪造 | ajax
一.简介 django为用户实现防止跨站请求伪造的功能,通过中间件 django.middleware.csrf.CsrfViewMiddleware 来完成.而对于django中设置防跨站请求伪造功 ...
- ajax向Django前后端提交请求和CSRF跨站请求伪造
1.ajax登录示例 urls.py from django.conf.urls import url from django.contrib import admin from app01 impo ...
- python 全栈开发,Day87(ajax登录示例,CSRF跨站请求伪造,Django的中间件,自定义分页)
一.ajax登录示例 新建项目login_ajax 修改urls.py,增加路径 from app01 import views urlpatterns = [ path('admin/', admi ...
- (22)Ajax的基本使用(实现登录功能和局部刷新以及防止跨站请求伪造攻击)
Ajax的作用 前后端分离的项目,需要交互,就要通过Ajax来完成交互 AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”.即 ...
- Django框架 之 基于Ajax中csrf跨站请求伪造
Django框架 之 基于Ajax中csrf跨站请求伪造 ajax中csrf跨站请求伪造 方式一 1 2 3 $.ajaxSetup({ data: {csrfmiddlewaretoken: ...
- Web安全相关(二):跨站请求伪造(CSRF/XSRF)
简介 CSRF(Cross-site request forgery跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对 ...
- 关于XSS(跨站脚本攻击)和CSRF(跨站请求伪造)
我们常说的网络安全其实应该包括以下三方面的安全: 1.机密性,比如用户的隐私被窃取,帐号被盗,常见的方式是木马. 2.完整性,比如数据的完整,举个例子,康熙传位十四子,被当时四阿哥篡改遗诏:传位于四子 ...
- xss(跨站脚本攻击),crsf(跨站请求伪造),xssf
我们常说的网络安全其实应该包括以下三方面的安全: 1.机密性,比如用户的隐私被窃取,帐号被盗,常见的方式是木马. 2.完整性,比如数据的完整,举个例子,康熙传位十四子,被当时四阿哥篡改遗诏:传位于四子 ...
- Django之CSRF 跨站请求伪造
一.简介 1.点我了解什么是跨站请求伪造 2.django为用户实现防止跨站请求伪造的功能,通过中间件 django.middleware.csrf.CsrfViewMiddleware 来完成.而对 ...
随机推荐
- CSS3渐变相关
背景渐变 background: -moz-linear-gradient( top,#f24652,#da2c3c); background: -o-linear-gradient(top,#f24 ...
- 【java】彩票中奖码生成器:java.util.Random里的方法public int nextInt(int bound)
package 彩票中奖码生成器; import java.util.Random; public class TestRandom { public static void main(String[ ...
- [array] leetcode-55. Jump Game - Medium
leetcode-55. Jump Game - Medium descrition Given an array of non-negative integers, you are initiall ...
- visual studio 2012打开提示 未能将网站×××配置为使用 ASP.NET 4.5 和 尚未在Web服务器上注册,您需要手动将Web服务器配置为使用ASP.NET 4.5
未能将网站×××配置为使用 ASP.NET 4.5.为了使此网站正确运行,您必须将它手动配置为使用ASP.NET 4.5. ASP.NET 4.5尚未在Web服务器上注册,您需要手动将Web服务器配置 ...
- shell if相关参数
[ -a FILE ] 如果 FILE 存在则为真. [ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真. [ -c FILE ] 如果 FILE 存在且是一个字特殊文件则为真. [ ...
- ES6 数组的扩展
1. Array.from() Array.from()将类数组(array-like)对象与可遍历的对象转化为数组并返回. 下面是一个类数组 let arr = { '0':'a', '1':'b' ...
- 3.Nginx常用功能介绍
Nginx常用功能介绍 Nginx反向代理应用实例 反向代理(Reverse Proxy)方式是指通过代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并且从内部网络服 ...
- Q:javax.comm 2.0 windows下Eclipse的配置
@转自http://blog.csdn.net/zhuanghe_xing/article/details/7523744处 要在Windows下,对计算机的串口或并口等进行编程,可以选择使用Java ...
- python爬虫如何爬知乎的话题?
因为要做观点,观点的屋子类似于知乎的话题,所以得想办法把他给爬下来,搞了半天最终还是妥妥的搞定了,代码是python写的,不懂得麻烦自学哈!懂得直接看代码,绝对可用 #coding:utf-8 fro ...
- 如何将外部的obj模型导入OpenGL
1.关于obj的说明. obj中存放的是顶点坐标信息(v),面的信息(f),法线(vn),纹理坐标(vt),以及材质(这个放在mtl)中 我使用CINEMA 4D导出用VS查看后的信息: CINEMA ...