CSRF跨站请求伪造的模拟GET请求实例

2025-10-24 00:33:34

1、在命令行创建django工程djcsrfget,在工程内创建应用testget,命令如下:

django-admin startproject djcsrfget

cd djcsrfget

python manage.py startapp testget

CSRF跨站请求伪造的模拟GET请求实例

2、使用PyCharm打开此工程,在工程的同名的文件夹的settings文件,添加应用配置和模板路径,修改的settings.py内容如下:

INSTALLED_APPS = [

 

   'django.contrib.admin',

 

   'django.contrib.auth',

 

   'django.contrib.contenttypes',

 

   'django.contrib.sessions',

 

   'django.contrib.messages',

 

   'django.contrib.staticfiles',

 

   'csrfget.apps.CsrfgetConfig',

 

]

 

 

ROOT_URLCONF = 'djcsrftest.urls'

 

TEMPLATES = [

 

   {

 

       'BACKEND': 'django.template.backends.django.DjangoTemplates',

 

       'DIRS': [os.path.join(BASE_DIR,'templates')],

 

       'APP_DIRS': True,

 

       'OPTIONS': {

 

           'context_processors': [

 

               'django.template.context_processors.debug',

 

               'django.template.context_processors.request',

 

               'django.contrib.auth.context_processors.auth',

 

               'django.contrib.messages.context_processors.messages',

 

           ],

 

       },

 

   },

 

]

CSRF跨站请求伪造的模拟GET请求实例

3、在项目根目录,新建templates文件夹,并在文件夹内新建‘login.html’和

‘index.html’文件,内容如下:

login.html

<!DOCTYPE html>

 

<html lang="en">

 

<head>

 

   <meta charset="UTF-8">

 

   <title>Title</title>

 

</head>

 

<body>

 

   <form action="/login/"  method="POST">

 

       {% csrf_token %}

 

       <label>用户名</label>

 

       <input type="text" name ="username">

 

       <br/>

 

       <br/>

 

       <label>密码</label>

 

       <input type="password" name="password">

 

       <br/>

 

       <br/>

 

       <input type="submit" value="登录">

 

   </form>

 

</body>

 

</html>

index.html

<!DOCTYPE html>

 

<html lang="en">

 

<head>

 

   <meta charset="UTF-8">

 

   <title>Title</title>

 

</head>

 

<body>

 

   欢迎{{user}}

 

   

 

       <a href="/transfer/">转账</a>

 

   

 

</body>

 

</html>

CSRF跨站请求伪造的模拟GET请求实例

CSRF跨站请求伪造的模拟GET请求实例

4、在工程的同名文件夹的urls.py文件,include到应用的urls.py文件,代码如下:

from django.conf.urls import url,include

 

from django.contrib import admin

 

urlpatterns = [

 

   url(r'^admin/', admin.site.urls),

 

   url(r'',include('csrfget.urls')),

 

]

在应用内新建urls.py文件,并写代码如下:

from django.conf.urls import url

 

from . import views

 

urlpatterns = [

 

   url(r'login/',views.login),

 

   url(r'index/',views.index),

 

   url(r'transfer/',views.transfer)

 

]

CSRF跨站请求伪造的模拟GET请求实例

5、在应用的views.py写代码如下,包含三个方法,登录,首页,转账

from django.shortcuts import render,HttpResponse,redirect

 

from django.contrib import auth

 

from django.contrib.auth.decorators import login_required

 

# Create your views here.

 

def login(request):

 

   if request.method == 'POST':

 

      username = request.POST.get('username')

 

      password = request.POST.get('password')

 

      user = auth.authenticate(username=username, password=password)

 

      if user:

 

          auth.login(request,user)

 

          print ('ok')

 

          return redirect('/index/')

 

   return render(request,'login.html')

 

@login_required(login_url='/login/')

 

def index(request):

 

   return render(request,'index.html')

 

@login_required(login_url='/login/')

 

def transfer(request):

 

   return HttpResponse('you have tansfer 1000RMB')

转账和首页都是必须登录后才能进入

CSRF跨站请求伪造的模拟GET请求实例

6、进行数据库迁移并创建一个超级用户,打开开发工具的terminal

python manage.py migrate

python manage.py createsuperuser

CSRF跨站请求伪造的模拟GET请求实例

7、运行服务器,登录上一步创建的用户,在首页点击transfer,弹出下图第三个

试想如果这个连接是别人发过来的,在用户已经登录后同样可以操作,只要是在同一个浏览工具,就有当前用户的cookie。

python manage.py runserver

CSRF跨站请求伪造的模拟GET请求实例

CSRF跨站请求伪造的模拟GET请求实例

CSRF跨站请求伪造的模拟GET请求实例

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢