Django之CSRF跨站请求伪造(老掉牙的钓鱼网站模拟)

首先这是一个测试的代码css

请先在setting页面进行下面操做html

注释完成后,开始模拟钓鱼网站的跨站请求伪造操做:前端

前端代码:jquery

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
</head>
<body>
<form action="" method="post">
    转帐人:<input type="text" name="user">
    转帐对象:<input type="text" name="to_sb">
    转帐金额:<input type="text" name="money">
    <input type="submit" value="转帐">
</form>
</body>
</html>

效果以下(很low):bootstrap

视图代码以下:后端

def index(request):
    if request.method=='POST':
        user=request.POST.get('user')
        to_sb=request.POST.get('to_sb')
        money=request.POST.get('money')
        #打印一下转帐结果
        print('%s给%s转了%s元' % (user,to_sb,money))
        return HttpResponse('转帐成功')

    return render(request,'index.html')

 

若是是一个正常的网站,运行结果应该以下:函数

提交:post

后端的结果:测试

这样是没有任何问题的,可是若是网站没有进行防CSRF攻击(基本不可能,如今的主流网站都有防CSRF攻击),那么钓鱼网站就能够假装,进行跨站请求伪造网站

接下来是钓鱼网站的视角:

首先:我看见了下面这个特别low的页面,发现没有防CSRF(等会说防护),直接copy源码

前端代码:

 

 而后本身作一个和原网站如出一辙的网站:

 

 简单的模拟一下,网址已经变了

该网址的前端页面代码:

<body>
<form action="http://127.0.0.1:8000/index/" method="post">
    转帐人:<input type="text" name="user">
    转帐对象:<input type="text" >
    <input type="text" name="to_sb" value="诈骗犯" style="display: none">
    转帐金额:<input type="text" name="money">
    <input type="submit" value="转帐">
</form>>

 

 和原网址的代码对比,其余不变,可是转帐对象的name值被取消了,而且还添加了一个input框,该input框的name值,是原转帐对象的name值,value值也被写死,还把该标签隐藏,这样你在转帐对象中不管输入什么,你都是白给,由于name='to_sb'的这个标签的值已经被固定了,并且该表单的action函数仍是原网站,因此说钓鱼网站的后端不用写post请求来以后的操做。

钓鱼网站的后端代码:

def test(request):

    return render(request, 'test.html')

也就是说,后端逻辑用的原网站的逻辑,只是简单的固定了转帐人的值

运行一下:

前端钓鱼页面:

 

 当前网址仍是:

转帐:

跳到了原网页

看看原网站的打印输出:

 

 这样已经老掉牙的钓鱼网站的模型就完成了

 

防CSRF跨站请求伪造攻击:

1.打开注释

2.在页面中添加:

 

 这样防护就作好了(因此说是老掉牙的钓鱼攻击)

测试一下:

点击转帐:

这是由于在添加了{% csrf_token %}以后,该网站的前端代码已经改变了

 

 该value是随机的,刷新一下,值就会改变,也就是说,钓鱼网站不能动态的获取,那么CSRF攻击也就没用了

相关文章
相关标签/搜索