XSS攻击:Cross Site Scripting(跨站脚本攻击)

XSS攻击原理:程序+数据=结果,如果数据中包含了一部分程序,那么结果就会执行不属于站点的程序。

XSS攻击能干什么?能注入Script标签注入程序,那么所有JS能干的事情攻击者都能干,比如如下一些操作:

1、获取页面数据,偷取网站任意数据

2、获取Cookies,偷取用户资料、偷取用户密码和登录态

3、劫持前端逻辑,欺骗用户

4、发送请求

XSS分类:

1、反射型:url参数直接注入

反射型需要将url发给别人进行传播,别人点开url才能进行攻击,如果要迷惑别人一般会转换成短链,让别人看不出时进行了XSS攻击的url。

2、存储型:存储到数据库后读取时注入

存储型危害更大,因为可以做到用户无感知,而且只要访问过页面的用户都会受到攻击,传播方式更广。

XSS攻击注入点:

1、HTML节点内容

2、HTML属性

3、Javascript代码

4、富文本

XSS防御:

(一)转义手段防御

1、浏览器自带防御机制,将url一些简单的输入进行拦截。只拦截反射型攻击,以及注入在节点和属性中的攻击。

2、HTML节点内容防御:将<和>两个符号转义成&lt;和&gt;。转义时机有在存入数据库和读取后显示两个时间点进行。

3、HTML属性防御:"引号转义成&quto;,'单引号转义成',空格转义成 ,因为HTML属性可以不加引号,如果不对空格转义,那写代码必须带上引号写属性值。

HTML内容和属性的防御可以合并成一个方法,因为转义的字符都互不影响对应结果。

HTML5之后就没有对&符号进行转义,如果要更加安全就将&符号转义成&amp;

4、Javascript代码防御:\\转义成\\\\,”引号转义成\\“,JS需要转义的字符有很多,可以用JSON.stringify()方法来进行字符串转义。

5、富文本防御:

  (1)按黑名单过滤不能写入的标签属性,实现简单只需正则表达式进行过滤,弊端是因为html太庞大,容易疏忽造成漏洞。

  (2)按白名单保留部分标签和属性,优势是过滤比较彻底,但是实现难度比较大,需要先解析成dom树,然后过滤生成新的内容。而且白名单过滤的属性标签可能会对业务造成一定的影响,需要进行平衡。

    npm install xss,这个包是别人写好的xss白名单库。

(二)CSP,Content Security Policy内容安全策略

用于指定哪些内容可执行,通过http-header进行配置可信任的内容。

Content-Security-Policy配置以下属性加对应属性的策略值。

child-src,connect-src,default-src

font-src,frame-src,img-src

manifest-src,media-src,object-src

script-src,style-src,worker-src

最新文章

  1. Mysql数据库主从心得整理
  2. [OLE DB 源 [1]] 警告: 无法从 OLE DB 访问接口检索列代码页信息。如果该组件支持“DefaultCodePage”属性,将使用来自该属性的代码页。如果当前的字符串代码页值不正确,请更改该属性的值。如果该组件不支持该属性,将使用来自该组件的区域设置 ID 的代码页。
  3. eclipse创建python项目
  4. c# 轻量级 ORM 框架 之 Model解析 (四)
  5. 如何用java实现使用电子邮件控制你的电脑
  6. 用java的socket来发送一个类
  7. 贴片晶振跟随WIFI渗透到我们的生活之中
  8. 基于vue2.0的网易云音乐 (实时更新)
  9. 【待整理】MySQL alter table modify vs alter table add产生state不一样
  10. 自定义Func模块
  11. 《http权威指南》读书笔记5
  12. [leetcode]98. Validate Binary Search Tree验证二叉搜索树
  13. hdu2886 Lou 1 Zhuang 数学/快速幂
  14. HISAT,sTRINGTIE,ballgown三款RNA-seq信息分析软件
  15. springboot2 生产部署注意事项【持续更新】
  16. 20155329胡佩伦《Java程序设计》第2周学习总结
  17. (转)[InnoDB系列] -- SHOW INNODB STATUS 探秘
  18. python特有的协程
  19. RTT之柿饼UI
  20. vue2.0 $router和$route的区别

热门文章

  1. JZ-030-连续子数组的最大和
  2. 结合AngularJS实现拖拽
  3. rsync同步文件到远程机器,卡住10多秒--问题解决过程
  4. Django之 CBV和FBV
  5. Redis系统学习
  6. IIS将应用程序池配置为在计划时间执行回收 (IIS 7)
  7. mock axios vue的数据传递关系
  8. JavaScript 的诞生历史
  9. MM32F0140的复位脚nRST复用成普通GPIO PA10功能
  10. @SpringBootApplication注释在内部有什么用处?