web框架--XSS攻击和CSRF请求伪造

XSS

跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的特殊目的。

tornado中已经为我们给屏蔽了XSS,但是当我们后端向前端写前端代码的时候传入浏览器是字符串,而不是形成代码格式。所以就需要一个反解,在传入模板语言中前面加一个raw,例如{% raw name %}

class IndexHandler(tornado.web.RequestHandler):
    def get(self, *args, **kwargs):
        jump = ‘‘‘<input type="text"><a onclick = "Jump(‘%s‘,this);">GO</a>‘‘‘%(‘/index/‘)
        script = ‘‘‘
            <script>
                function Jump(baseUrl,ths){
                    var val = ths.previousElementSibling.value;
                    if (val.trim().length > 0){
                        location.href = baseUrl + val;
                    }
                }
            </script>
        ‘‘‘
        self.render(‘index.html‘,jump=jump,script=script)  #传入两个前端代码的字符串

start.py

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6     <style>
 7         .pager a{
 8             display: inline-block;
 9             padding: 5px;
10             margin: 3px;
11             background-color: #00a2ca;
12         }
13         .pager a.active{
14             background-color: #0f0f0f;
15             color: white;
16         }
17     </style>
18 </head>
19 <body>
20     <div class="pager">
21         {% raw jump %}
22         {% raw script%}
23     </div>
24 </body>
25 </html>    

index.html

CSRF

CSRF(Cross-site  request forgery跨站请求伪造,也被称为“one click attack”或者session riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式几乎相左。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。
当前防范 XSRF 的一种通用的方法,是对每一个用户都记录一个无法预知的 cookie 数据,然后要求所有提交的请求中都必须带有这个 cookie 数据。如果此数据不匹配 ,那么这个请求就可能是被伪造的。

Tornado 有内建的 XSRF 的防范机制,要使用此机制,你需要在应用配置中加上 xsrf_cookies 设定:xsrf_cookies=True

简单来说就是在form验证里面生成了一段类似于自己的身份证号一样,携带着他来访问网页

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3
 4 import tornado.web
 5 import tornado.ioloop
 6
 7 class CsrfHandler(tornado.web.RequestHandler):
 8
 9     def get(self, *args, **kwargs):
10         self.render(‘csrf.html‘)
11
12     def post(self, *args, **kwargs):
13         self.write(‘已经收到客户端发的请求伪造‘)
14
15
16 settings = {
17     ‘template_path‘:‘views‘,
18     ‘static_path‘:‘statics‘,
19     ‘xsrf_cokkies‘:True,        # 重点在这里,往这里看
20 }
21
22 application = tornado.web.Application([
23     (r‘/csrf‘,CsrfHandler)
24 ],**settings)
25
26 if __name__ == "__main__":
27     application.listen(8888)
28     tornado.ioloop.IOLoop.instance().start()

start.py

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6 </head>
 7 <body>
 8     <form action="/csrf" method="post">
 9         {% raw xsrf_form_html() %}
10         <p><input name="user" type="text" placeholder="用户"/></p>
11         <p><input name=‘pwd‘ type="text" placeholder="密码"/></p>
12         <input type="submit" value="Submit" />
13         <input type="button" value="Ajax CSRF" onclick="SubmitCsrf();" />
14     </form>
15
16     <script src="/statics/jquery-1.12.4.js"></script>
17     <script type="text/javascript">
18
19         function ChangeCode() {
20             var code = document.getElementById(‘imgCode‘);
21             code.src += ‘?‘;
22         }
23         function getCookie(name) {
24             var r = document.cookie.match("\\b" + name + "=([^;]*)\\b");
25             return r ? r[1] : undefined;
26         }
27
28         function SubmitCsrf() {
29             var nid = getCookie(‘_xsrf‘);
30             $.post({
31                 url: ‘/csrf‘,
32                 data: {‘k1‘: ‘v1‘,"_xsrf": nid},
33                 success: function (callback) {
34                     // Ajax请求发送成功有,自动执行
35                     // callback,服务器write的数据 callback=“csrf.post”
36                     console.log(callback);
37                 }
38             });
39         }
40     </script>
41 </body>
42 </html>

index.html

原文地址:https://www.cnblogs.com/june-L/p/12070941.html

时间: 2024-08-02 22:00:48

web框架--XSS攻击和CSRF请求伪造的相关文章

SQL 注入、XSS 攻击、CSRF 攻击

SQL 注入.XSS 攻击.CSRF 攻击 SQL 注入 什么是 SQL 注入 SQL 注入,顾名思义就是通过注入 SQL 命令来进行攻击,更确切地说攻击者把 SQL 命令插入到 web 表单或请求参数的查询字符串里面提交给服务器,从而让服务器执行编写的恶意的 SQL 命令. 对于 web 开发者来说,SQL 注入已然是非常熟悉的,而且 SQL 注入已经生存了 10 多年,目前已经有很成熟的防范方法,所以目前的 web 应用都很少会存在漏洞允许进行 SQL 注入攻击. 除非是入门开发人员,在开发

web安全(xss攻击和csrf攻击)

1.CSRF攻击: CSRF(Cross-site request forgery):跨站请求伪造. (1).攻击原理: 如上图,在B网站引诱用户访问A网站(用户之前登录过A网站,浏览器 cookie 缓存了身份验证信息), 通过调用A网站的接口攻击A网站. (2).防御措施: 1)token验证:登陆成功后服务器下发token令牌存到用户本地,再次访问时要主动发送token,浏览器只能主动发cookie,做不到主动发token 2)referer验证:判断页面来源是否自己站点的页面,不是不执行

sql注入,xss攻击,csrf(模拟请求)

如何防止别人模拟请求? 使用令牌token解决模拟请求  好处是 唯一性只能有一次请求 如何拿到如何生成token  改如何防止呢? 使用验证码 xss攻击? xss攻击也叫脚本注入 为什么会才生xss攻击? 提交了<script></script>标签 怎么解决xss攻击 將脚本转换成html进行展示 原文地址:https://www.cnblogs.com/zhouwen2017/p/10516900.html

对xss攻击和csrf攻击的理解

CSRF 1.CSRF的基本概念.缩写.全称 CSRF(Cross-site request forgery):跨站请求伪造. 2.CSRF的攻击原理 用户是网站A的注册用户,且登录进去,于是网站A就给用户下发cookie. 从上图可以看出,要完成一次CSRF攻击,受害者必须满足两个必要的条件: (1)登录受信任网站A,并在本地生成Cookie.(如果用户没有登录网站A,那么网站B在诱导的时候,请求网站A的api接口时,会提示你登录) (2)在不登出A的情况下,访问危险网站B(其实是利用了网站A

WEB防XSS攻击

web开发中的常见漏洞,一般都发生在这些输入框中,一般情况我们会对这些输入域进行客户端的校验和服务器端的校验,但是在客户端的校验基本上起不来什么作用,因为客户端的所有代码我们都可以进行更改,防止漏洞的发生还是需要服务器端的校验,但是一般服务器端的校验都是校验你输入的字符或者是数字的长度等等.下面就演示一个XSS的漏洞注入,JSP页面中有两个输入框,姓名和个人介绍.当我们写入姓名和个人介绍之后,后台代码的处理就是进行一个简单的转发,然后把我们刚才的信息转发到一个jsp页面进行显示. 如果我们在个人

tornado web框架

tornado web框架 tornado简介 1.tornado概述 Tornado就是我们在 FriendFeed 的 Web 服务器及其常用工具的开源版本.Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快.得利于其 非阻塞的方式和对epoll的运用,Tornado 每秒可以处理数以千计的连接,因此 Tornado 是实时 Web 服务的一个 理想框架.我们开发这个 Web 服务器的主要目的就是为了处理 F

CSRF(跨站请求伪造攻击)详解以及防护之道

CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,该攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在并未授权的情况下执行在权限保护之下的操作,有很大的危害性.然而,该攻击方式并不为大家所熟知,很多网站都有 CSRF 的安全漏洞.本文首先介绍 CSRF 的基本原理与其危害性,然后就目前常用的几种防御方法进行分析,比较其优劣.最后,本文将以实例展示如何在网站中防御 CSRF 的攻击,并分享一些开发过程中的最佳实践. C

python学习之路web框架

WEB框架的本质 python的WEB框架分为两大类: 1.自己写socket,自己处理请求 2.基于wsgi(Web Server Gateway Interface WEB服务网关接口),自己处理请求 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. 看下面的代码是WEB最本质的WEB框架(自己写的socket,自己处理的请求) #!/usr/bin/env python #coding:utf-8 import socket

[转载] 新兵训练营系列课程——平台服务部署及Web框架

原文: http://weibo.com/p/1001643875679132642345 大纲 微博平台主要负责微博基础功能.接下来将会介绍 平台的作用,以及服务提供的形式 平台Web服务的部署 平台Web框架简介 背景 目前整体架构大体上分为三层 展现层:手机端,主站和第三方应用,承担相关业务的前端展示 适配层:负责服务端和多个展示端的接口适配 服务层:提供基础功能服务,包括Feed服务,用户关系,开放平台和消息箱等 平台作为整个微博架构的基础功能服务层,对外以Http接口的方式提供服务.接