风炫安全WEB安全学习第二十七节课 XSS的防御措施
2024-08-28 03:55:52
XSS防御措施
总的原则
控制好输入/输出
- 过滤:根据业务需求进行过滤,对email,手机号码这样的输入框进行验证。
- 转义:所有输出到前端的数据都根据输出点进行转义,对输入的字符串进行html实体化编码
PHP
php可以用以下函数来防御
htmlspecialchars();
htmlentities();
HTMLPurifier.auto.php插件 http://htmlpurifier.org/download
RemoveXss函数 https://gist.github.com/aligundogdu/1839051
Python
python库
>>> import cgi
>>> cgi.escape('<script>&"', quote=True)
'<script>&"'
>>> HTMLParser.unescape.__func__(HTMLParser, '<script>&"')
u'<script>&"'
import bleach
from bleach.sanitizer import ALLOWED_TAGS,ALLOWED_ATTRIBUTES
@require_http_methods(['POST'])defmessage(request):# 从客户端中获取提交的数据
content = request.POST.get('content')
# 在默认的允许标签中添加img标签
tags = ALLOWED_TAGS + ['img']
# 在默认的允许属性中添加src属性
attributes = {**ALLOWED_ATTRIBUTES,'img':['src']}
# 对提交的数据进行过滤
cleaned_content=bleach.clean(content,tags=tags,attributes=attributes)
# 保存到数据库中
Message.objects.create(content=cleaned_content)
return redirect(reverse('index'))
JAVA
pom.xml
首先添加一个jar包:commons-lang-2.5.jar ,然后在后台调用这些函数:
StringEscapeUtils.escapeHtml(string);
StringEscapeUtils.escapeJavaScript(string);
StringEscapeUtils.escapeSql(string);
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.5</version>
</dependency>
或者自己编写一个XSSFilter静态类,可以直接调用
JavaScript
设置Httponly
不要动态输出用户的输入
不要使用eval函数解析json,用JSON.parse()
前后端分离eval('(' + jsonstr + ')') #这种方式 是不严谨的解析 JSON.parse()
https://github.com/leizongmin/js-xss
<script src="https://rawgit.com/leizongmin/js-xss/master/dist/xss.js"></script>
<script>
// 使用函数名 filterXSS,用法一样
var html = filterXSS('<script>alert("xss");</scr' + 'ipt>');
alert(html);
</script>
参考:
http://blog.evalshell.com/2020/12/20/风炫安全web安全学习第二十七节课-xss的防御措施/
最新文章
- 分享google的技能的11个级别,大家看看自己到哪个级别了?
- 委托Delegate,多播委托和委托链
- tomcat发布记录
- PHP批量替换MySql数据库中的数据内容(替换MySql数据库内容源码)
- CSS中的content和attr的用法
- c#读properties文件
- lua package path 设置方法
- 对敏捷开发的误解(转自MBAlib)
- wordpress 404 error on all pages!
- Java 反射 方法调用
- nm applet disable
- 微信公众号java开发思路
- nginx下的几种包管理器
- php web开发安全之csrf攻击的简单演示和防范(一)
- PYC#1欢乐赛第三题题解
- ARDC连接设备异常之ADB version mismatch的处理
- 基于vue现有项目的服务器端渲染SSR改造
- 乘法DAC一点知识
- 移动端小坑:用户长按H5文字出现复制
- python-web自动化-元素操作:windows窗口切换 / alert切换 / iframe切换
热门文章
- 二分查找——没有想象中的容易(详解各种变式,超深度理解,c++)
- Jmeter(三十二) - 从入门到精通 - Jmeter Http协议录制脚本工具-Badboy5(详解教程)
- 学习一下 SpringCloud (一)-- 从单体架构到微服务架构、代码拆分(maven 聚合)
- 基于.NET的程序读取Excel文件的解决方案
- C# 继承类的值赋
- 【题解】NOI 系列题解总集
- 题解 CF1428G Lucky Numbers (Easy Version and Hard Version)
- Mysql5.7.20安装文档
- Canal监听mysql
- sql server如何把退款总金额拆分到尽量少的多个订单中