风炫安全WEB安全学习第二十七节课 XSS的防御措施

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)
'&lt;script&gt;&amp;&quot;'
>>> HTMLParser.unescape.__func__(HTMLParser, '&lt;script&gt;&amp;&quot;')
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的防御措施/

最新文章

  1. 分享google的技能的11个级别,大家看看自己到哪个级别了?
  2. 委托Delegate,多播委托和委托链
  3. tomcat发布记录
  4. PHP批量替换MySql数据库中的数据内容(替换MySql数据库内容源码)
  5. CSS中的content和attr的用法
  6. c#读properties文件
  7. lua package path 设置方法
  8. 对敏捷开发的误解(转自MBAlib)
  9. wordpress 404 error on all pages!
  10. Java 反射 方法调用
  11. nm applet disable
  12. 微信公众号java开发思路
  13. nginx下的几种包管理器
  14. php web开发安全之csrf攻击的简单演示和防范(一)
  15. PYC#1欢乐赛第三题题解
  16. ARDC连接设备异常之ADB version mismatch的处理
  17. 基于vue现有项目的服务器端渲染SSR改造
  18. 乘法DAC一点知识
  19. 移动端小坑:用户长按H5文字出现复制
  20. python-web自动化-元素操作:windows窗口切换 / alert切换 / iframe切换

热门文章

  1. 二分查找——没有想象中的容易(详解各种变式,超深度理解,c++)
  2. Jmeter(三十二) - 从入门到精通 - Jmeter Http协议录制脚本工具-Badboy5(详解教程)
  3. 学习一下 SpringCloud (一)-- 从单体架构到微服务架构、代码拆分(maven 聚合)
  4. 基于.NET的程序读取Excel文件的解决方案
  5. C# 继承类的值赋
  6. 【题解】NOI 系列题解总集
  7. 题解 CF1428G Lucky Numbers (Easy Version and Hard Version)
  8. Mysql5.7.20安装文档
  9. Canal监听mysql
  10. sql server如何把退款总金额拆分到尽量少的多个订单中