开年遇到的第一个问题就是解决XSS攻击>_<,可见要时刻保证网站的安全性至关重要。做好网站安全,不仅维护网站的稳定性,更保证用户数据的一致性。对此,总结一下笔者在工作中遇到的安全问题以及防御方法。

前端中常见的两种网站应用安全漏洞攻击的方式是 XSS 与 CSRF,本文详细介绍两种攻击方式的概念、原理以及防御方式。

XSS

XSS(Cross-site scripting)跨站脚本攻击是恶意用户在网站中注入的脚本,当正常用户打开网站时受到影响并可能获取用户cookie等信息一种安全攻击行为。常见的例子是用户进入某个网站的时候一直弹出alert框等。
常见的 XSS 方式分为两类:持久性和非持久性,也有机构将其分为传统型(由服务器端代码缺陷引起)和基于 DOM 型(有客户端引起)。下面介绍三种类型:

  • 反射型 反射型跨站脚本攻击最常见的方式是客户端输入查询信息,服务器端将其返回并且显示在页面上造成攻击。如直出页面,后面根据参数查询返回对应的查询信息和结果。或者用户在input输入框中进行查询等,值得注意的是,使用 innerHTML 插入 <script>alert(document.cooke)</script 并不会执行 script 中的代码,需要构造对应事件触发。如: <img src="xxx.jpg" width="0" height="0" border="0" onload="javascript:alert(document.cookie);">
  • 存储型存储型与反射型 XSS 攻击的区别在于是否存储在数据库中,如用户写博客和评论等,这种方式的影响是持久的。
  • 基于 DOM恶意用户构造的脚本并不会经过服务器端,完全发生在客服端,如通过链接(?userName=<img onload="javascript:alert(document.cookie)"/>)的查询参数来显示用户名等。

针对 XSS 攻击,经常有以下两个方式来进行防御:

  • 设置重要的cookie信息为 httpOnly 对于重要的 cookie字段,如:可以通过 cookie 某个字段和某个接口获取好友关系的,需要将其设置为 httpOnly,使得恶意用户无法获取。
  • 对输入进行检测和转义 对用户输入的或者从链接获取参数需要展示到页面中需要校验合法性和使用转义函数进行转义,如常见的函数如下:
function escHTML(str) {if (!str) return '';return str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/x27/g, ''').replace(/x22/g,'&quto;');
}

CSRF

CSRF(Cross-site request forgery)是一种攻击,迫使用户在受信任网站上执行不需要的一些操作。具体过程如下:

  1. 用户向信任站点如example.com发送请求
  2. 用户验证通过、获得信任站点的身份信息,并放入cookie中,用户此时可以在站内进行其他请求;
  3. 用户未退出登录example.com,然后访问hack.com网站,该网站返回攻击性代码并且在页面中存在访问example.com的请求;
  4. 浏览器在用户可能不知情的情况下向example.com发送请求;
  5. 由于同域名可以带上cookie信息,因此信息认证通过,请求伪造成。

针对 CSRF 攻击,常用的防御方式如下:

  • 检测请求来源 在请求头中有一个refree字段,refree记录了发送请求的域名,比如:hack.com向example.com中发送请求,那么refree就为hack.com,只要在处理请求中做相应的校验就可以中断请求。
  • 加入token校验 crsf之所以能够伪造请求成功,其原因之一在于所有的用户信息放于cookie中;因此可以在每次请求中加入token,然后后台进行校验,如果校验通过则进行处理。生成token方式之一如下:
function getToken (token) {var str = token || '';var hash = 5381;for (var i = 0, len = str.length; i < len; ++i) {hash += (hash << 5) + str.charCodeAt(i);}return hash & 0x7fffffff;
}

具体攻击示例点击查看

XSS和CSRF详解与防御相关推荐

  1. XSS 和 CSRF 详解

    我们常说的网络安全其实应该包括以下三方面的安全: 1.机密性,比如用户的隐私被窃取,帐号被盗,常见的方式是木马. 2.完整性,比如数据的完整,举个例子,康熙传位十四子,被当时四阿哥篡改遗诏:传位于四子 ...

  2. XSS(跨站脚本)漏洞详解之XSS跨站脚本攻击漏洞的解决

    XSS(跨站脚本)漏洞详解 XSS的原理和分类 跨站脚本攻击XSS(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆, ...

  3. [系统安全] 四十四.APT系列(9)Metasploit技术之基础用法万字详解及防御机理

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

  4. xss编码绕过详解(更像是在介绍实体编码和JS编码的解析过程)

    xss编码绕过详解(更像是在介绍实体编码和JS编码的解析过程) 注:本文通过研究各种情况下实体编码和JS编码是否生效,进而总结了哪些情况下能够进行编码后,javascript代码依然能够正常执行. 解 ...

  5. csrf漏洞防御方案_CSRF 漏洞原理详解及防御方法

    跨站请求伪造:攻击者可以劫持其他用户进行的一些请求,利用用户身份进行恶意操作. 例如:请求http://x.com/del.php?id=1是一个删除ID为1的账号,但是只有管理员才可以操作,如果攻击 ...

  6. XSS跨站脚本攻击详解以及复现gallerycms字符长度限制短域名绕过

    一.什么是XSS 1.XSS原理 跨网站脚本(Cross-site scripting,XSS) 又称为跨站脚本攻击,是一种经常出现在Web应用程序的安全漏洞攻击,也是代码注入的一种.XSS是由于We ...

  7. dvwa详解_DVWA(六):XSSReflected 反射型XSS全等级详解

    XSS 概念: 由于web应用程序对用户的输入过滤不严,通过html注入篡改网页,插入恶意脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击. XSS类型: Reflected(反射型):只是简单的 ...

  8. dvwa详解_DVWA(六):XSS-Reflected 反射型XSS全等级详解

    XSS 概念: 由于web应用程序对用户的输入过滤不严,通过html注入篡改网页,插入恶意脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击. XSS类型: Reflected(反射型):只是简单的 ...

  9. (29.1)【CSRF详解】CSRF原理、利用过程、分类、举例、工具……

    目录 CSRF 一.简介: 二.CSRF与XSS的区别: XSS CSRF 三.原理: 四.基本流程: 五.危害: 六.分类: 站外攻击: 站内攻击: 七.举例: Get提交方法: Post提交方法: ...

最新文章

  1. Kali Linux又增加一个顶级域名kali.download
  2. eclipse开发android的好处,从Eclipse切换到IntelliJ IDEA for Android开发的好处
  3. 2019年湘潭大学程序设计竞赛
  4. 汽车之家基于 Flink + Iceberg 的湖仓一体架构实践
  5. 格式化的盘要怎么恢复数据
  6. gradle插件 java_简单的Gradle Java插件自定义
  7. 磁卡门锁怎么配卡_样式多的铜工艺品怎么设计请查看_江西南昌皇巢|铜门||别墅铜门|...
  8. excel2010设置列宽为像素_职场新手都能学会的Excel技巧:快速调整行高、列宽
  9. Qt DLL总结【三】-VS2008+Qt 使用QPluginLoader访问DLL
  10. 如何将Node.js Streaming MapReduce引入Amazon EMR
  11. 每日一题[LeetCode 689]三个无重叠子数组的最大和
  12. html自动加好友,WeTool微信自动加好友软件
  13. 设置ie默认版本为ie7
  14. Eclipse、Tomcat安装配置及部署教程
  15. pyqt:使用qrc文件配置图片资源,生成py文件
  16. 概率图模型之隐马尔可夫模型
  17. BAT 老兵的经验之谈,成长路上这个道理越早知道越好
  18. 文法去除空产生式_文法化简 (CFG Simplification) 翻译
  19. 资产监测设备中法国配置工具介绍(二)
  20. QQ音乐关键字搜索并生成下载url

热门文章

  1. JetBrains 发布Kotlin 1.0
  2. 如何启用和关闭数据库的Oracle归档模式
  3. Ubuntu 10.04 lucid 安装 MariaDB 5.5
  4. 修改MS SQL2000数据库的所有者,很实用
  5. GVRP:GARP VLAN 注册协议 - 802.1P、802.1Q (GARP VLAN Registration Protocol - 802.1P、802.1Q)...
  6. mysql:修改root初始化密码
  7. 北京工业计算机考研科目,2020北京工业大学计算机考研初试科目、参考书目、招生人数汇总...
  8. mysql导出bacpac_数据库的迁移
  9. java主机上切换用户,linux 主机上更换默认的jdk
  10. groovy附件存mysql_Groovy 操作mysql数据库