前端代码常见的安全缺陷(一)

目录

1、使用不安全的target blank

问题描述:

修复建议:

2、Javascript 代码劫持

问题描述:

修复建议:

示例:

3、跨站请求伪造

问题描述:

修复建议:

4、遗留的调试代码

问题描述:

修复建议:

5、HTML页面中包含硬编码域名

问题描述:

修复建议:

6、密码管理:null 密码

问题描述:

修复建议

7、易受攻击的框架

问题描述:

修复建议:

8、请求头部未设置httpOnly属性

问题描述:

修复建议:


1、使用不安全的target blank

问题描述:

在使用<a>标签中使用target属性,当值设置为“_blank”攻击者会针对`window.opener`API进行恶意行为的攻击,有可能导致钓鱼安全漏洞问题。

例如,以下示例使用的`target`属性,但是没有设置`rel`属性。

    <a href="www.xxxxx.com" target="_blank" >test</a>

修复建议:

建议使用`target="_blank"`时,配合使用`rel="noopener noreferrer"`

例如,配置rel属性如下所示:

<a href="www.xxxxx.com" target="_blank" rel="noopener noreferrer">test</a>

2、Javascript 代码劫持

问题描述:

使用JavaScript传送敏感数据的应用程序可能会存在JavaScript劫持的漏洞,该漏洞允许未经授权的攻击者从一个易受攻击的应用程序中读取机密数据。

JavaScript劫持可以简单的理解为模拟授权的用户,窃取用户在服务器上的信息。Web浏览器使用同源策略(Same Origin Policy),以保护用户免受恶意网站的攻击。同源策略规定:如果要使用JavaScript来访问某个网页的内容的话,则JavaScript和网页必须都来源于相同的域。若不采取同源策略,恶意网站便可以使用受害者的客户端凭证来运行 JavaScript,从其他网站加载的敏感信息,并对这些信息进行处理,然后将其返回给攻击者。

使用JSON传输数据的JavaScript应用更容易受到JavaScript劫持攻击。由于JSON使用JavaScript语法的子集表示对象、数组、简单值,JSON本身可以被当做JavaScript执行,且使用eval()函数对JSON数据结构求值早被认为是存在风险的,其可能执行恶意代码。

修复建议:

尽量避免跨域的数据传输,对于同域的数据传输使用xmlhttp的方式作为数据获取的方式。如果是跨域的数据传输,必须要对敏感的数据获取做权限认证,具体的方式可以包括:

  1. referer的来源限制,利用前端referer的不可伪造性来保障请求数据的应用来源于可信的地方,此种方式力度较稀,完全依赖于referer,某些情况下(如存在XSS)可能导致被绕过。
  2. 加入Token。利用Token对调用者的身份进行认证,这种方式对于调用者的身份会要求力度较细,但是一旦出现XSS也可能导致前端Token的泄露,从而导致保护失效。
  3. 避免直接执行JavaScript响应:在响应中加入一些额外的字符。这些响应只有经过了修改,才能成功地转到JavaScript解释器进行处理。这样可以防止攻击者使用<script>标签来进行劫持。比如,可以给响应加上注释符号,使其无法直接执行;或者是在真实的响应前面,添加死循环语句,使其无法正常的直接运行。

示例:

function postXHR () {
        var xhr = new XMLHttpRequest();
        xhr.open('GET', './test.config', true)
        xhr.onreadystatechange = function () {
            if(xhr.readyState == 4) {
                if(xhr.status == 200 || xhr.status == 0) {
                    console.log(xhr.responseText)
                }
            }
        }
        try {
            xhr.send(null)
        } catch (error) {
            console.log('error', error)
        }
      }

以上代码示例,在代码扫描中,一直提示第三行关键词`open`有问题,然后根据建议,在请求头部添加token,或者Referer,或者在回调的时候,对返回值做xss过滤了,还是提示报错。

在这里可以换一种方式来实现,例如通过fetch API,或者支持异步请求的框架Axios等。

3、跨站请求伪造

问题描述:

跨站请求伪造(CSRF)是伪造客户端请求的一种攻击。应用程序允许用户提交不包含任何nonce(与用户Session关联的加密随机值)的请求,将可能导致CSRF攻击。
例如:以下代码片段用于银行转账功能,对于该重要敏感的操作没有进行相应防护,将易于导致跨站请求伪造攻击。

var req = new XMLHttpRequest();  
req.open("POST", "/transferFunds", true);  
body = "to_account=Bill&amount=10000";  
req.send(body);  

例2:下面是通过表单发送请求。

<form method="GET" action="/transferFunds ">
    cash: <input type="text" name="cash">   
    to: <input type=" text " name=“to">   
    <input type="submit" name="action" value="TransferFunds">   
</form>

修复建议:

防止跨站请求伪造攻击的方法如下:

  1. 二次验证,进行重要敏感操作时,要求用户进行二次验证。
  2. 验证码,进行重要敏感操作时,加入验证码。
  3. 在重要敏感操作的表单中加入隐藏的Token。

例如:下面代码片段中,在表单中增加了一个Token。

req.open("POST", "/transferFunds", true);  
body = "to_account=Bill&amount=10000&token=" + token;  
//token为与会话相关的一次性随机数。  
req.send(body);  

这样,服务器端程序响应用户请求前先验证Token,判断请求的合法性。对于Token,越难被猜出攻击者攻击成功的概率就越低。

4、遗留的调试代码

问题描述:

应用程序中的测试代码会建立一些意想不到的入口,这些入口可能会被攻击者作为“后门”进行利。有的测试代码本身并不会带来危害,但它表明了程序未进行严格的清理,攻击者很可能会查找到另外一些可利用的测试代码。
例如

console.log(123456789)

修复建议:

应用程序在发布之前应删除测试代码。

5、HTML页面中包含硬编码域名

问题描述:

HTML中引用其他网站的资源是非常危险的,如果攻击者入侵该网站域名,便可以篡改引用资源的内容。
例如

<script src="https://apps.bdimg.com/libs/jquery/1.8.3/jquery.min.js"></script>

 

此段代码依赖网站https://apps.bdimg.com,如果攻击者入侵了此网站,则可以篡改jquery.min.js的内容,具有风险。

修复建议:

需要控制HTML文件所引用的js资源,尽量使用本地的资源,不要包含其他网站的js或其他资源。

6、密码管理:null 密码

问题描述:

null 密码会消弱系统的安全性。

例如:

var password = null;
var passwordCapability = null

修复建议

程序中不应采用null密码,程序所需密码应从配置文件中获取加密的密码值。

7、易受攻击的框架

问题描述:

在项目中可能引入的框架版本比较低,例如,使用jquery 1.8.3 的版本,以及使用它的功能,如下所示:

      $.ajax({
        url: "./test.config",   
        type: "GET", 
        async: true,
        success:  (json, status, error) => {
            console.log('jquery ajax', json);
        },
        error: function (xhr, status, error) {
            console.error(error);
        },
        });

修复建议:

根据最新jquery发现的漏洞,如果项目中有使用jquery的低版本,建议进行升级,最新发现的漏洞,在3.5.0 才得到修复,建议版本 >= 3.5.0 

8、请求头部未设置httpOnly属性

问题描述:

目前主流的浏览器都支持cookie的httpOnly属性,该属性设置为true的时候表示cookie只能由web服务器访问,如果不设置该属性的话默认为false这样攻击者就可以很容易的访问到cookie信息,从而获取authentication标记或者一些会话信息。
例如:下面代码段创建cookie,但是没有设置httpOnly属性。

var  info = {domain: 'secure.com', path: '/userInfo',secure:true};  
response.cookie("cookieName",data,info)  

修复建议:

在发送cookie的时候应该设置httpOnly属性,
例如

var  info = {domain: 'secure.com', path: '/userInfo',secure:true,httpOnly:true};  
response.cookie("cookieName",data,info)  

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

uniapp:小白1分钟学会使用webSocket(可无脑复制)

uni.connectSocket() uni.$emit页面通信 项目中使用uni.connectSocket()创建webSocket的总结&#xff0c;代码可无脑复制&#xff0c;直接使用。 1、main.js 引入vuex import store from ./store; Vue.prototype.$store store;vuex中封装webSocket 2、vuex的&#xff1a;index…

快速排序题目SelectK问题(力扣75.颜色分类、力扣215.数组中的第K个最大元素、面试题17.14最小K个数)

力扣75.颜色分类 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums &#xff0c;原地对它们进行排序&#xff0c;使得相同颜色的元素相邻&#xff0c;并按照红色、白色、蓝色顺序排列。 我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 必须在不使用库内置的 sor…

C语言(二维数组)

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸各位能阅读我的文章&#xff0c;诚请评论指点&#xff0c;关注收藏&#xff0c;欢迎欢迎~~ &#x1f4a5;个人主页&#xff1a;小羊在奋斗 &#x1f4a5;所属专栏&#xff1a;C语言 本系列文章为个人学习笔记&#x…

C语言趣味代码(二)

1.珠玑妙算 1.1 介绍 《珠玑妙算》(Mastermind)是英国Invicta公司于1973年开始销售的一款益智游戏&#xff0c;据说迄今为止已经在全世界销售了5000万套。《珠玑妙算》于1974年获奖后&#xff0c;在1975年传入美国&#xff0c;1976年leslieH.Autl博士甚至还出版了一本名为The…

狗都不学系列——虚拟机的基本使用

前言 虚拟机&#xff08;Virtual Machine&#xff09;指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。在实体计算机中能够完成的工作在虚拟机中都能够实现。 简单来讲就是我们可以通过虚拟机来安装各种不同的操作系统进行体验。 这次主…

SQL约束

文章目录 约束约束的分类&#xff1a;按照约束的作用效果不同唯一约束主键约束外键约束检查约束非空约束默认值约束 按照是否跟随列和字段属性来创建约束行级约束表级约束 创建约束创建唯一约束创建完表之后创建唯一约束创建表的同时创建唯一约束行级约束表级约束 创建主键约束…

记录一下hive启动metestore服务时报错

【背景说明】 之前hadoop有问题&#xff0c;把hadoop和MySQL删了重装&#xff0c;hive没有动&#xff0c;然后启hive的metastore服务的时候&#xff0c;显示找不到metastore数据库 【报错】 Caused by: java.lang.reflect.InvocationTargetExceptionat sun.reflect.Generated…

完成学校官网页面制作

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title>教务系统</title> <style> .wap{ margin:0 auto; width:955px; } .top{ height:150px; padding-left:85px; …

内旋风铣也挺有意思,不够还没搞透

内旋风铣&#xff0c;这一术语在机械制造业中并不陌生&#xff0c;它代表着一种高效且精确的加工方法。这一技术的名称“内旋风铣”便揭示了其两大核心特点&#xff1a;一是“内”&#xff0c;指的是在工件内部进行加工&#xff0c;通常涉及到难以触及的复杂曲面&#xff1b;二…

FebHost:CC域名商业和非商业使用的区别

在当今互联网的世界中&#xff0c;域名的选择不仅关乎一个网站的在线身份&#xff0c;更与其背后的商业策略紧密相连。.cc 顶级域&#xff08;TLD&#xff09;作为众多选择之一&#xff0c;其使用方式可分为商业和非商业两大类。 商业用途&#xff1a;当提及.cc域名的商业用途…

Windows安装ElasticsSearch详细指南(亲测)

一、安装jdk ElasticSearch是基于lucence开发的&#xff0c;也就是运行需要java jdk支持。所以要先安装JAVA环境。 由于ElasticSearch 5.x 往后依赖于JDK 1.8的&#xff0c;所以现在我们下载JDK 1.8或者更高版本。 下载JDK1.8,下载完成后安装。 二、安装ElasticSearch 1.El…

【UE5.1 C++】VS2022下载安装

目录 步骤 一、Visual Studio下载安装 二、Visual Studio Integration Tool插件安装 先看一下UE和VS的兼容性 &#xff08;虚幻5&#xff1a;为虚幻引擎C项目设置Visual Studio开发环境&#xff09; &#xff08;虚幻4&#xff1a;设置虚幻引擎的Visual Studio&#xff0…

OJ:寻找独一无二的数

目录 &#x1f3dd;1.问题描述&#xff1a; &#x1f3dd;2.分析问题&#xff1a; &#x1f3dd;3.最终代码&#xff1a; &#x1f3dd;1.问题描述&#xff1a; &#x1f3dd;2.分析问题&#xff1a; 先看看下面的代码的结果是多少&#xff1f; #include<stdio.h> in…

宝塔面板国际版aaPanel 精简版安装

宝塔面板国际版aaPanel 精简版安装 很多人都知道宝塔面板&#xff0c;但不知道宝塔面板还有英文版&#xff0c;宝塔面板英文版不是单纯的宝塔面板的翻译&#xff0c;而是根据老外的使用习惯及国外的网络环境做了一定的优化&#xff0c; 比如&#xff1a;去掉了手机号验证、去…

论文笔记;LargeST: A Benchmark Dataset for Large-ScaleTraffic Forecasting

Neurips 2023 1 intro 目前交通预测数据集的问题 规模小&#xff0c;通常只包含数百个节点和边在时间覆盖范围上存在严重不足&#xff0c;通常不超过6个月单个节点的元数据不足 ——> 提出了一个新的基准数据集LargeST 广泛的图大小&#xff0c;包括加利福尼亚州的8,600个…

向量的求导

参考&#xff1a; 向量的求导 向量内积求导

基于Vue3的openlayers地图显示

基于Vue3的openlayers地图显示 &#xff08;1&#xff09;接着上一篇将讲&#xff0c;在components文件夹下创建BaseMap.vue文件夹 &#xff08;2&#xff09;在App.vue文件里面引入BaseMap.vue文件&#xff0c;如下代码所示&#xff1a; &#xff08;3&#xff09;在BaseMa…

Rust异步编程简介

Rust异步编程简介 计算机已经尽可能快了。加快程序速度的一种方法是并行或并发执行操作。这两个术语之间有细微的区别。并行执行意味着我们同时在两个不同的 CPU 上执行两个不同的任务。并发执行意味着单个 CPU 通过交错执行这些任务&#xff0c;同时在多个任务上取得进展。 R…

【支付宝】对接手机网站支付踩坑点记录

前言 简单记录一下对接Wap支付的问题&#xff0c;alipay和wxpay认证过程差不多&#xff0c;有个体商户或企业即可&#xff0c;前者文档不易懂后者还好&#xff0c;但是wxpay门槛高&#xff0c;个人认为pc网站支付(native支付)就是为了收300认证费&#xff01; 应用公私钥 第一…

【数据结构】时间复杂度的例题

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;数据结构 &#x1f337;追光的人&#xff0c;终会万丈光芒 前言&#xff1a; 这篇文章是关于时间复杂度的一些例题&#xff0c;关于时间复杂度和空间复杂度和算法的计算效率的基本知识点我放在…