session和xsrf
1.pip install pycket
2.pip install redis
防止xsrf攻击只需在模板form标签加入:
{% module xsrf_form_html() %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录</title>
</head>
<body> <form method="post" action="/login?next={{ nextname }}" >
{% module xsrf_form_html %}
用户名</br>
<input type="text" name="name" /><br>
<input type="text" name="passwd" /><br>
<input type="submit" value="提交">
</form>
</body>
</html>
session.html
#coding:utf-8
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
import time from tornado.options import define,options
from data.sqlalchemy08 import User,session
from tornado.web import authenticated
from pycket.session import SessionMixin define('port',default=8000,help='run port',type=int)
define('version',default='0.0.1',help='version 0.0.1',type=str)
def auth(fun):
def wrapper(self,*agrs,**kwargs):
id=self.get_secure_cookie('ID')
if id:
return fun(self,*args,**kwargs)
else:
self.redirect('/login')
return auth
#设置继承
class BaseHandeler(tornado.web.RequestHandler,SessionMixin):
def get_current_user(self):
# current_user=self.get_secure_cookie('ID')
current_user=self.session.get('user')
if current_user:
return current_user
else:
return None
class IndexHandler(BaseHandeler):
#用auth装饰,可省去大量重复代码,在需要登录的地方调用就可以
# @auth
#从写认证方法中的current_user
# def get_current_user(self):
# current_user = self.get_secure_cookie('ID')
# if current_user:
# return current_user
# else:
# return None
#用tornado自带的认证,需在底部app设置加上登录界面login_url,否则报错,为了再次复用,写个父类
@authenticated
# @tornado.web.authenticated
def get(self):
# id=self.get_secure_cookie('ID')
# if id:
# self.write('登录成功')
# else:
# self.redirect('/login')
self.write('登录成功') class LoginHandler(BaseHandeler):
def get(self):
#self.render('08login.html', error=None)
nextname=self.get_argument('next','')
self.render('11authencated.html',nextname=nextname) def post(self):
nextname = self.get_argument('next', '')
username = User.by_name(self.get_argument('name', ''))
passwd = self.get_argument('passwd', '')
if username and username[0].passwd == passwd:
#self.set_secure_cookie('ID',username[0].username,max_age=100)
self.session.set('user',username[0].username)
# self.write('登录成功-----')
# time.sleep(3)
self.redirect(nextname)
else:
self.redirect('/login') if __name__ == "__main__":
tornado.options.parse_command_line()
# print(options.port)
app=tornado.web.Application(
handlers=[
(r'/index',IndexHandler),
(r'/login',LoginHandler),
],
template_path='templates',
static_path='static',
login_url='/login',
debug=True,
cookie_secret='aaa5555sssss',
#配置redis设置
pycket={
'engine':'redis',
'storage':{
'host':'localhost',
'port':6379,
'db_sessions':5,
'db_notifications':2**31,
},
'cookies':{
'expires_days':30,
'max_age':100
},
},
)
#固定写法:
http_server=tornado.httpserver.HTTPServer(app)
http_server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()
session.py
session和xsrf的更多相关文章
- Python模拟登录实战(三)
目标:模拟登录知乎 代码如下: #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'ziv·chan' import re impor ...
- beego中Controller的GetControllerAndAction方法
beego中Controller的GetControllerAndAction方法 GetControllerAndAction方法在beego中的源码 // GetControllerAndActi ...
- Web安全相关(二):跨站请求伪造(CSRF/XSRF)
简介 CSRF(Cross-site request forgery跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对 ...
- 跨站请求伪造 CSRF / XSRF<一:介绍>
跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一 ...
- ASP.NET Core 防止跨站请求伪造(XSRF/CSRF)攻击
什么是反伪造攻击? 跨站点请求伪造(也称为XSRF或CSRF,发音为see-surf)是对Web托管应用程序的攻击,因为恶意网站可能会影响客户端浏览器和浏览器信任网站之间的交互.这种攻击是完全有可能的 ...
- .NET Core实战项目之CMS 第十四章 开发篇-防止跨站请求伪造(XSRF/CSRF)攻击处理
通过 ASP.NET Core,开发者可轻松配置和管理其应用的安全性. ASP.NET Core 中包含管理身份验证.授权.数据保护.SSL 强制.应用机密.请求防伪保护及 CORS 管理等等安全方面 ...
- ASP.NET MVC CSRF (XSRF) security
CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站 ...
- XSS/XSRF
一.XSS 1.1 xss的含义 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为 ...
- ASP.NET Core 防止跨站请求伪造(XSRF/CSRF)攻击 (转载)
什么是反伪造攻击? 跨站点请求伪造(也称为XSRF或CSRF,发音为see-surf)是对Web托管应用程序的攻击,因为恶意网站可能会影响客户端浏览器和浏览器信任网站之间的交互.这种攻击是完全有可能的 ...
随机推荐
- Python学习之高级特性
切片 在Python基础篇里,我们知道Python的可序列对象可以通过索引号(下标)来引用对象元素,索引号可以由0开始从左向右依次获取,可以从-1开始由右向左获取.这种方法可以帮助我们依次获取我们想要 ...
- Python学习之set集合
set集合以{}保存一组可迭代对象,如列表,字符串,set集合本身.集合内的元素若有重复的,将自动去除重复元素 a=set([1,2,3]) print(a) b=set('hello python' ...
- Linux平台下安装MySQL
1.下载RPM包 http://dev.mysql.com/downloads/mysql/5.5.html#downloads 选择[Red Hat & Oracle Enterprise ...
- 笔记-python-standard library-16.3 time
笔记-python-standard library-16.3 time 1. time 1.1. 开始 time模块中时间表现的格式主要有三种: timestamp时间戳,时间戳表示 ...
- 笔记-restful
笔记-restful 1. restful简介 restful:representational state transfer,简称REST,描述了一个架构样式的网络系统. 值得注意的是RE ...
- Python文章推荐1
Table of Contents 1. 分享最近看到的python相关的几篇好文(我只是想偷懒) 1.1. 形象解释了什么是GIL 1.2. 知乎上 Pythonic 相关 1.3. evil &q ...
- pdfmake实现中文支持,解决中文乱码问题
引言:当初自己为了在项目中bootstrap-table中实现导出pdf,使用的pdfmake,但是pdfmake默认使用的不是中文字体,实现pdfmake使用中文字体主要就是编译新的vfs_font ...
- 1,版本控制git--仓库管理
再开始这个话题之前,让我想起了一件很痛苦的事情,在我大学写毕业论文的时候,我当时的文件是这样保存的 毕业论文_初稿.doc 毕业论文_修改1.doc 毕业论文_修改2.doc 毕业论文_修改3.d ...
- P1021 邮票面值设计
P1021 邮票面值设计 题目描述 给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤15)种邮票的情况下(假定所有的邮票数量都足够),如何设计邮票的面值,能得到最大值MAX,使在1-MAX ...
- 资料--JavaScript原型链
JavaScript原型链 原文出处:https://www.cnblogs.com/chengzp/p/prototype.html 目录 创建对象有几种方法 原型.构造函数.实例.原型链 inst ...