前端常见的安全问题_前端安全问题-程序员宅基地

技术标签: 安全  web安全  前端  javascript  

一、XSS (Cross-Site Scripting)跨站脚本攻击

通常指通过“HTML注入”篡改了网页,插入了恶意的脚本,从而在用户浏览网页时,获取用户信息、控制用户浏览器等的一种攻击

分类:持久性(存储型xss)

指攻击者通过漏洞将恶意内容写在数据库中,然后当其他用户访问含有这些恶意数据的网页时,就遭受了攻击。攻击位置常常在留言板,阅读列表等。

非持久性( 反射型xss)

把用户输入的数据或者url携带的数据“反射”给浏览器,往往是黑客通过诱使用户点击一个恶意链接从而达到攻击目的

非持久性( Dom型xss)

客户端脚本使用来自用户请求的恶意内容将HTML写入自己的页面 基于DOM的XSS是基于反射XSS的另一种形式。 DOM和'传统'反射XSS之间的区别在于有没有和服务器进行交互。

二、CSRF (Cross-site request forgery) 跨站请求伪造

本质:攻击者利用用户身份操作用户账户的一种攻击方式

原理:

参考上图,完成一次CSRF攻击,必须满足两个条件:

1、用户登录受信任网站A,并且在本地生成Cookie

2、用户在不退出网站A的情况下,访问危险网站B

示例:

1、银行网站A,它以GET请求来完成银行转账的操作,如:    http://www.mybank.com/Transfer.php?toBankId=123&money=1000

2、危险网站B,它里面有一段HTML的代码如下:<img src=http://www.mybank.com/Transfer.php?toBankId=123&money=1000>

3、你登录了银行网站A,然后访问危险网站B,你会发现你的银行账户少了1000块

三、点击劫持(clickJacking)

点击劫持是一种视觉上的欺骗手段。攻击者使用一个透明的、不可见的iframe,覆盖在一个网页上,然后诱使用户在网页上进行操作,此时用户将在不知情的情况下点击透明的iframe页面。通过调整iframe页面的位置,可以诱使用户恰好点击在iframe页面的一些功能性按钮上。

常见方式:flash劫持,图片覆盖攻击,拖拽劫持,触屏劫持

劫持防御:

1、frame busting :通过js来禁止iframe嵌套,缺点:容易被绕过

2、使用 X-Frame-Options   HTTP 头部 ,有三个值:      

DENY :浏览器拒绝当前页加载任何frame页面      

SAMEORIGIN:只允许加载同源域名下的页面      

ALLOW-FROM:可定义允许frame加载的页面地址

iframe问题所在:

如果iframe中的域名因为过期而被恶意攻击者抢注,或者第三方被黑客攻破,iframe中的内容被替换掉了,从而利用用户浏览器中的安全漏洞下载安装木马、恶意勒索软件等等

防御:       

添加 sanbox属性,最小权限原则 <iframe sandbox src="..."> ... </iframe>

sandbox 提供配置参数

1、allow-forms:允许iframe中提交form表单

2、allow-popups:允许iframe中弹出新的窗口或者标签页(例如,window.open(),   showModalDialog(),target=”_blank”等等)

3、allow-scripts:允许iframe中执行JavaScript

4、allow-same-origin:允许iframe中的网页开启同源策略

四、错误内容推断

产生原因:        

假设通过http请求一个资源,后端通过Content-Type Header建议浏览器按照图片来渲染这次的HTTP响应,但是浏览器过于“智能”,强大的容错能力,发现响应中内容其实是JavaScript,于是就擅自做主把这段响应当做JS脚本来解释执行,安全问题也就产生了。

防御:

通过设置X-Content-Type-Options这个HTTP Header明确禁止浏览器去推断响应类型, 后端服务器返回的Content-Type建议浏览器按照图片进行内容渲染,浏览器发现有X-Content-Type-OptionsHTTP Header的存在,并且其参数值是nosniff,因此不会再去推断内容类型

五、本地存储数据泄露

产生原因:现在很多数据,包括一些敏感信息都存储在前端,如果发生xss等漏洞,这些信息就好被获取

防御:加密,不要存储在前端本地

六、不安全的第三方依赖包

第三方组件、依赖类库等存在安全漏洞 例如:jQuery就存在多个已知安全漏洞,例如jQuery issue 2432,使得应用存在被XSS攻击的可能。而Node.js也有一些已知的安全漏洞,比如CVE-2017-11499,可能导致前端应用受到DoS攻击。 防御:NSP(Node Security Platform),Snyk 工具扫描

七、缺失静态资源完整性校验

产生原因:静态资源存放到CDN,如果CDN被劫持了或者CDN中的资源被污染,那我们的前端应用拿到的就是有问题的JS脚本或者Stylesheet文件。

防御:用浏览器提供的SRI(Subresource Integrity)   <script src=“https://example.js” integrity=“sha384-eivAQsRgJIi2KsTdSnfoEGIRTo25NCAqjNJNZalV63WKX3Y51adIzLT4So1pk5tX”></script>

八、防范措施

1、谨慎用户输入信息,进行输入检查(客户端和服务端同时检查)

2、在变量输出到HTML页面时,都应该进行编码或转义来预防XSS攻击

3、该用验证码的时候一定要添上

4、尽量在重要请求上添加Token参数,注意Token要足够随机,用足够安全的随机数生成算法

5、当有<frame><iframe><object>时,合理设置X-Frame-Options HTTP响应头,添加sanbox属性等

6、检查验证请求来源,对每一个重要的操作都进行重新验证

7、不要将重要文件、备份文件存放在公众可以访问到的地方

8、安全防御的体系是相辅相成、缺一不可的

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/laihongfeng/article/details/123330608

智能推荐

【起航计划 021】2015 起航计划 Android APIDemo的魔鬼步伐 20 App-&gt;Intents createChooser-程序员宅基地

文章浏览阅读271次。Intents 这个例子的代码非常简单: public void onGetMusic(View view) { Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("audio/*"); startActivity(Intent.create

用Python学数学之Sympy代数符号运算_python symbols-程序员宅基地

文章浏览阅读1.1k次。在我们初、高中和大学近10年的学习时间里,数学一直占据着非常大的分量,但是回忆过去可以发现,我们把大量的时间都花在反复解题、不断运算上,计算方法、运算技巧、笔算能力以及数学公式的记忆仿佛成了我们学习数学的全部。这些记忆和技巧没几年就忘掉了,但很多人甚至还记得那份阴影;笔算与解题在AI、图形图像、数据分析等上被软件所取代。那我们学生时代的数学还剩下什么呢?计算器与数学说起数学计算器,我们常见的是加减乘除四则运算,有了它,我们就可以摆脱笔算和心算的痛苦。四位数以上的加减乘除在数学的原理上其实并不难,但是如果_python symbols

新技术计算机的案例,计算机新技术-程序员宅基地

文章浏览阅读549次。本书为大学计算机基础课程的配套实验教材内容包括Windows 7安装与桌面应用、电子文档的制作与编排、电子表格的制作规范与方法、演示文稿应用、互联网应用、数据库基础与数据处理(Access)、程序设计基础与算法、计算机实用工具的使用等¥27.70定价:¥39.80(6.96折)本书为大学计算机基础课程的配套实验教材内容包括Windows 7安装与桌面应用、电子文档的制作与编排、电子表格的制作规范与..._计算机专业群新技术案例

Android 实现WebView点击图片查看大图列表及图片保存_抖音小程序中 打开web-view之后 页面生成的图片如何点击下载-程序员宅基地

文章浏览阅读1w次,点赞6次,收藏61次。在日常开发过程中,有时候会遇到需要在app中嵌入网页,此时使用WebView实现效果,但在默认情况下是无法点击图片查看大图的,更无法保存图片。本问将就这一系列问题的实现进行说明。项目的知识点:1.加载网页后如何捕捉网页中的图片点击事件;2.获取点击的图片资源后进行图片显示,获取整个页面所有的图片;3.支持查看上下一张的图片以及对图片缩放显示;4.对图片进行保存;_抖音小程序中 打开web-view之后 页面生成的图片如何点击下载

python入门(8)面向对象 :类、对象、属性与方法_python中的类和对象,属性和方法-程序员宅基地

文章浏览阅读4.1k次,点赞5次,收藏34次。当我们谈论Python的面向对象思想时,主要指的是Python中的类和对象的概念以及与之相关的特性和原则。面向对象编程(Object-Oriented Programming,简称OOP)是一种常用的编程范式,它将程序中的数据和操作数据的方法组织在一起,形成对象,通过对象之间的交互来实现程序的功能。在Python中,面向对象编程主要围绕以下几个核心概念展开:(1):类是面向对象编程的基础,它是一种自定义的数据类型,用于描述对象的属性和行为。_python中的类和对象,属性和方法

unity shader graph node_unity shader node-程序员宅基地

文章浏览阅读293次。artistic -> blendartistic -> mask_unity shader node

随便推点

前端水印实现方案-程序员宅基地

文章浏览阅读406次。大厂技术坚持周更精选好文一、问题背景为了防止信息泄露或知识产权被侵犯,在web的世界里,对于页面和图片等增加水印处理是十分有必要的,水印的添加根据环境可以分为两大类,前端浏览器环境..._前端水印生成方案

PAT B1049/A1104 题解_pat b1049 c-程序员宅基地

文章浏览阅读254次。1104 Sum of Number Segments (20 分)Given a sequence of positive numbers, a segment is defined to be a consecutive subsequence. For example, given the sequence { 0.1, 0.2, 0.3, 0.4 }, we have 10 segme..._pat b1049 c

解决linux/config.h: No such file or directory_conin.h 没有那个文件或目录-程序员宅基地

文章浏览阅读1.9w次,点赞4次,收藏3次。问题: “linux/config.h: No such file or directory”原因与解决方法: 原因是2.6.19之后的内核没有了config.h文件,因此直接把对应的include注释掉即可。 或者添加头文件#include_conin.h 没有那个文件或目录

php微信分享带缩略图,网站实现微信分享带缩略图-程序员宅基地

文章浏览阅读289次。做网站的微信分享,之前一直获取不到缩略图和描述。后来总结了下经验。分享给大家参考。首先做微信分享我们需要一个 已经认证了的微信公众号 去绑定要分享的网站。然后设置服务器的白名单重点就是获取jssdk文件了。看文档说明wx.config({debug:true,// 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在p..._php 微信分享缩略图

简单背包问题(0032)_设有 一个 背包 能承 受重量 s(s>0), 又有 n(n>=1) 件物 品, 其 重 量 列 表-程序员宅基地

文章浏览阅读1.2k次。简单背包问题(0032)Time limit(ms): 1000Memory limit(kb): 65535Submission: 5792Accepted: 1753Didn't trying 搜索 动态规划 设有一个背包可以放入的物品重量为S,现有n件物品,重量分别是w1,w2,w3,…wn。 _设有 一个 背包 能承 受重量 s(s>0), 又有 n(n>=1) 件物 品, 其 重 量 列 表 为w=

一文看懂Web后端开发-程序员宅基地

文章浏览阅读2.8w次,点赞108次,收藏390次。一文看懂Web后端开发前言由于网络上系统地介绍后端开发的文章实在太少,而最近有恰巧有许多同学问我“什么是后端开发?”、“你为什么喜欢后端开发?”、“做后端都需要学什么?”,那么我们就来讲一讲,到底什么才是后端开发。定义后端开发(Back-End Development,也称服务端开发、服务器端开发等)是创建完整可运行的Web应用服务端程序(服务端程序和资源合称为后端,即在服务器上运行的、不涉及用户界面的部分)的过程,是Web应用程序开发的一部分。后端开发者使用Java、Golang等语言及其衍生的各_web后端开发

推荐文章

热门文章

相关标签