【NodeJS】3 种确保开源Node.js依赖包安全的方法

【DevSecOps】项目中总结出来提高NodeJS程序安全性的最佳实践 如今,Node.js 广泛应用于 Web 和移动应用程序,因为它填补了前端和后端应用程序之间的空白。不幸的是,Node.js 使用量的增加为攻击者利用错误配置和漏洞打开了新的大门。作为开发人员,我们有责任提高应用程序的安全性以防止这些攻击。因此,在本文中,我将讨论您可以遵循的 6 个最佳实践,以提高 Node.js 应用程序的安全性。多年来,基于注入的攻击一次又一次进入 OWASP(开放 Web 应用程序安全项目)和 SANS Top 25 CWE(常见弱点枚举)。因此,基于注入的攻击可以有多种形式; 阅读详情

随着Node.js应用程序的规模和特性的扩展,它们的依赖关系也会扩展。为了让Node.js应用程序能够正常运行,你还需要测试框架、UI框架、数据库客户端、像Express这样的MVC库等等。

然而,**黑客们正越来越多地瞄准这类依赖关系,发起链式攻击,将恶意代码注入第三方软件。**研究人员还发现,配置不良的构建过程使应用程序更容易受到这类攻击。

在这篇文章中,我们将回顾三种工具,它们是最近开源的,用于提高Node.js依赖的安全性,包括Socket、Node-Secure CLI和N|Solid。让我们开始吧!

什么是开源依赖关系?

**如果源代码可供任何人查看、修改或改进,则该软件被认为是开源的。**任何人都可以访问和使用源代码,或者增强原始软件,或者创建完全不同的东西。流行的托管服务如GitHub托管了许多这样的开源项目。

当开发人员决定在他们的应用程序中使用另一个软件包中已经存在的特性,而不是从头开始编写它时,原始包就会成为他们自己项目中的依赖项。

开发人员经常选择开源依赖项,因为它们是免费的。开发人员可以访问源代码,这意味着他们可以查看包是如何构建的。他们可以添加他们认为合适的特性,自己重新发布,或者甚至联系开源项目的原始作者,将他们添加的特性合并到现有代码中。

然而,偶尔会有一些附加到开源依赖项的许可证,对使用该依赖项的软件能做什么和不能做什么造成一些限制。例如,有些许可证不允许开发人员销售利用开源依赖关系的软件。因此,检查开放源码许可证并确保项目是兼容的是很重要的。

npm是Node.js的包管理器。它创建于2009年,是一个开源项目,帮助JavaScript开发人员轻松地将打包的模块作为依赖项共享。

开源的依赖关系是无价的,也是有风险的

许多软件开发团队依赖于开源依赖来实现身份验证等特性,从而加快了整体开发时间。然而,使用这些依赖项可能会使项目暴露于攻击,使它们面临嵌入恶意软件的风险。

依赖关系可以分为传递性依赖和直接依赖。直接依赖项是你的代码直接引用的库,而传递依赖项是你的依赖项链接到的库。本质上,传递依赖性是您的依赖性的依赖性。由于传递依赖,开发人员经常不知道他们正在使用的开源库的数量。
在这里插入图片描述
根据Veracode进行的研究,在2020年被访问的85000个应用程序中,71%在初始扫描时在开源库中有一个漏洞,47%的缺陷来自传递依赖。JavaScript应用程序是罪魁祸首,占这个数字的87%。

**当您安装一个依赖项时,您也导入了它的所有问题,比如安全缺陷甚至bug。**例如,如果用于生成用户详细信息的开源库有跨站点脚本漏洞,那么您的整个软件都是脆弱的,使您和您的用户处于数据被盗的风险中。作为开发人员,您有责任确保其他人编写的代码不会使您的系统变得不安全。

确保开源Node.js依赖的安全性

对开发人员来说,跟踪应用程序中使用的每个依赖项(包括直接依赖项和传递依赖项)是很重要的。如果开发人员不知道他们正在使用的依赖关系,他们就无法在开源安全性和许可证遵从性问题上保护自己。

**定期的代码检查对于开发团队跟踪依赖关系以及项目中依赖于它们的部分是很有帮助的。开发人员应该始终注意他们所使用的软件包的安全公告。**当有新的更新时,更新依赖关系也是一个很好的实践,密切关注补丁版本,它有时会修复已经报告的漏洞。

前述Veracode的研究报告称,**75%的已知缺陷可以通过对代码进行小的修改或补丁来轻松修复。**然而,开发人员也可以使用工具来扫描依赖关系树以发现安全风险。有许多工具可以集成到应用程序的构建过程中,并检测软件中的所有开源组件,生成关于许可、库存和安全性的报告。让我们回顾一下最流行的三种。

1. Socket

根据其文档,Socket可以在受到攻击之前检测并阻止它们,防止最坏的可能结果。Socket在包及其所有依赖项(包括传递依赖项)上运行静态分析,以查找特定的风险标记。它使用深度包检查来剥离依赖层,并描述其实际行为。

套接字通过防止任何被破坏或劫持的包渗透到您的供应链来确保安全性。它监视对package.json的实时更改,检测依赖更新是否引入了新的有风险的api,包括网络、shell、文件系统等等。最后,它可以阻止开源代码中的任何危险信号,包括恶意软件、错字占用、隐藏代码、误导包、权限蔓延等等。

Socket不仅可以检测依赖项中的漏洞,还可以提供关于依赖项风险的可操作反馈。要使用Socket,安装Socket GitHub应用程序来获得实时依赖扫描和报告每一个pull请求:
img

2. Node-Secure CLI

Node- secure CLI是来自NodeSecure的一个Node js命令行工具。它获取并深入分析给定npm包或带有package.json的本地项目的依赖树,输出一个.Json文件,其中包含关于每个包的所有元数据和标志。CLI能够打开JSON代码并显示网络中的所有依赖关系,帮助你识别潜在的安全威胁和问题:
img

有了生成的数据,就有可能快速识别跨项目和包的不同安全性和质量问题。Node-Secure CLI包可以在npm上使用。你可以使用下面的命令轻松安装它:

npm install @nodesecure/cli -g

安装后,nsecure的二进制文件将在终端中可用。要查看所有可用的命令,请运行nsecure --help。

3. N|Solid

N|Solid是来自NodeSource的一个可观察和洞察工具,用于管理Node.js的性能和安全。有了N|Solid,数据直接从您的应用程序架构和堆栈收集,然后以一个清晰的、用户友好的方式显示在N|Solid控制台。

通过一系列测试,npm包被评分,让开发人员了解他们的软件面临多大的风险,以及如何降低风险。Node.js包的评估依据是安全性、合规性和代码质量。
在这里插入图片描述

结尾

对于开发人员来说,更好地认识到他们对项目的依赖关系,从而减少黑客将恶意代码插入到开放源码依赖关系中的可能性。

为您的团队创建开放源码使用策略,监视开放源码依赖项的使用情况,以及寻找新的漏洞,将有助于极大地提高开放源码依赖项的安全性。

在本文中,我们回顾了Socket、Node-Secure CLI和N|Solid,这三种开源工具用于运行项目中可传递和直接依赖项的安全性报告。这些还可以帮助您审查许可和库存,防止您和应用程序用户将来遇到麻烦。
在这里插入图片描述

【NodeJS】Node.js是什么?能做什么? 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主。 阅读详情

相关推荐

LVGL配置文件lv_conf.h详解

lv_conf.h是一个用户级别的文件,它不属于内核的部分,因此,在不同的工程中,该文件有可能存在差异。lv_conf.h文件具有两大功能:(1)配置功能:内存、屏幕刷新周期、输入设备的读取周期,等等;(2)裁剪功能:使能失能某些功能,有效地优化Flash的分配。

qq_28576837的博客 5558

第三方组件安全评估指南

持续构建物料清单为每个应用程序持续构建详细的软件材料清单,从而全面洞察每个应用软件的组件情况。如果存在无法验证来源的开源组件,则不允许使用。强化软件供应链通过强化软件供应链来降低安全风险。这包括检查内部和外部源代码、支持脚本、配置文件和其他工件,并创建可信开源组件的内部存储库。而对外部存储库的使用要合理管理。风险管理通过制定策略确定可接受的开源组件、对在代码中发现漏洞或受限软件许可的合理响应,来管理风险。

weixin_61856963的博客 3454

《数据结构》04-树4 是否同一棵二叉搜索树

题目 给定一个插入序列就可以唯一确定一棵二叉搜索树。然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果。于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树。 输入格式: 输入包含若干组测试数据。每组数据的第1行给出两个正整数N (≤10)和L,分别是每个序列插入元素的个数和需要...

叫我皮卡丘 2011

nodejs代码保护方式--加密、混淆、编译、打包成exe

如何保护价值上千万的Node.js源代码? - 掘金 甲方突然要求做私有化部署 项目是用Node.js做的,Node.js代码需要保护吗? 一般情况下不需要,因为代码跑在云端服务器上啊。只要服务器安全,Node.js代码哪怕是明文,也是安全的。 可是凡事不怕一万,就怕万一。假如某天甲方突然要求做私有化部署,而你老板爽快地答应了,并把这个问题丢给你。 好吧,现在情况改变了,你需要代码部署在不信任的环境。一旦把Node.js源代码在甲方的服务器进行打包或上线,那甲方就可以轻易地查看,分析,篡改和复制你

王温暖的博客 1万+

从S参数矩阵到硬件实现:手把手教你用耦合微带线设计Marchand巴伦

本文详细介绍了使用耦合微带线设计Marchand巴伦的完整流程。从奇偶模理论和S参数矩阵分析入手,结合ADS仿真软件进行参数优化与电磁仿真验证,最终指导PCB布局、制作与实测调试。文章以2.4GHz Wi-Fi前端电路为例,手把手演示了从理论计算到硬件实现的全过程,并分享了关键的工程经验与调试技巧。

weixin_29271263的博客 535

HTB_Bike靶机之模板注入

船到桥头自然直 文章目录信息收集模板引擎SSIT 模板注入后放答案 信息收集 日常 A 扫描,两个端口 22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.4 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 3072 48:ad:d5:b8:3a:9f:bc:be:f7:e8:20:1e:f6:bf:de:ae (RSA) | 256 b7:89:6c:0b:20:ed:49:b2:c1:86:7c:.

网络安全学习 797

保护生产中 Node.js 应用程序安全的 15 项最佳实践

在后端开发方面,Node.js 是开发人员最喜欢的技术之一。它的受欢迎程度不断上升,现已成为在线攻击的主要目标之一。这就是为什么保护 Node.js 免受漏洞和威胁至关重要。在本指南中,您将看到为生产设计安全 Node.js 应用程序架构的 15 种最佳实践。实施所有这些实践,让您的后端比以往任何时候都更安全!

前端全栈开发者 752

基于Xilinx Artix7 的FPGA高级应用 (二):千兆以太网通信(实战篇)第一期

本项目是基于Xlinx Artix7 XC7A35T芯片 以太网芯片选用的是RTL8211EG PHY芯片 MAC 和PHY接口标准是GMII 开发工具是vivado 2018.3 我们先来复习一下以太网的基本通信原理: 当我们的计算机需要与局域网中另外的设备进行通信的时候,需要将数据传输到网卡进行编码,然后传输到线上,经过另一个设备的网卡解码成该设备能读取的数据。 关于以太网协议的知识在原理篇中已经讲过,不再重复,下面直接看接收代码: 首先注意我们的MAC和PHY通信选择的是GMII接口标准,发送数据一

工大技术底层人员的博客 4033

开源组件安全风险及应对

这里的开源组件指的是以开源许可证发布的软件组件、库、框架和工具等,组件的源代码是公开的,而根据不同的许可协议,版权所有者可以授予用户使用、研究、更改和分发软件及其源代码的权力。1703个代码库中,54%的代码库有开源协议冲突,31%的代码库包含没有协议或自定义协议的开源代码,89%的代码库包含超过4年以上未更新的开源代码,91%的代码库包含过去2年未更新的组件,84%的代码库包含至少一个开源漏洞,5%的代码库包含有漏洞的Log4J版本,11%的Java代码库包含有漏洞的Log4J版本。

INSBUG的博客 3261

手把手教你逆向京东搜索接口:H5ST 556位参数生成与V8补环境技巧

本文深入解析了京东搜索接口中关键的H5ST 556位参数生成机制,并提供了详细的逆向实战指南。针对其复杂的反爬虫环境检测,文章重点介绍了通过链式补环境技巧,在Node.js中完整模拟浏览器环境(包括原型链检测和指纹验证)的方法,帮助开发者成功绕过防护并生成有效参数。

weixin_29315091的博客 480

openlayers全面教程306+【目录】

vue+openlayers系列教程旨在为开发者提供简单快捷的示例。在每一个示例中,解释相应的API知识点。

大剑师兰特的GIS世界 2万+

Nodejs中包的介绍及npm安装依赖包的多种方法

1 包的介绍 1.1 什么是包 1.2 包的来源 1.3 为什么需要包 1.4 从哪里下载包 1.5 如何下载包 2 npm 2.1 npm安装依赖包 2.2 装包后多了哪些文件 2.3 安装指定版本的包

Qlz的博客 1万+

全网首发--Unet3+改进16:在不同位置添加RepLKBlock超大卷积核

本文提出了一种基于大核卷积的神经网络架构RepLKNet,旨在缩小CNN与ViTs之间的性能差距。通过重新审视CNN中的大核设计,研究证明使用少量大卷积核替代多个小核能获得更强大的性能。提出的RepLKNet采用31×31大卷积核,在ImageNet和下游任务上取得了与SwinTransformer相当或更好的结果,同时具有更低延迟。文章详细介绍了实现步骤:(1)创建RepLKBlock模块文件;(2)在模型层中添加注意力机制;(3)在UNet模型中集成RepLKBlock;(4)完成训练流程。该方法展现了

AIcurator的博客 610

corbado-nodejs:便捷的Node.js后端API接入方案

corbado-nodejs:便捷的Node.js后端API接入方案 项目介绍 corbado-nodejs 是一款专为Node.js环境设计的软件开发工具包(SDK),它为开发者提供了一个简单且安全的途径,用于接入Corbado的后端API。该SDK被设计为私有客户端,主要用于封闭的后端应用程序中,以确保API密钥的严格保密。 项目技术分析 corbado-nodejs SDK 是基于MIT协议...

gitblog_00832的博客 1123

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

node-red、nodejs与JavaScript之间的区别与联系

node-red、nodejs与JavaScript之间的区别与联系node-rednode jsJavascript总结:分析:   JavaScript是一门编程语言(脚本语言),而Node.js是一个平台,可以简单理解为它是JavaScript的一种执行环境。node.js是一个javascript的运行平台。   npm是JavaScript运行时,环境Node.js的默认包管理器。 区别与联系:   第一,JavaScript是一门编程语言(脚本语言),而Node.js是一个平台,可以简单理解为它

大小曲奇的博客 1万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain&#39;s apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath(&#39;DeepLearnToolbox&#39;));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand(&#39;state&#39;,0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W&#39;); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand(&#39;state&#39;,0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = &#39;sigm&#39;;%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, &#39;Too big error&#39;);```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand(&#39;state&#39;,0)sae = saesetup([784 100]);sae.ae{1}.activation_function = &#39;sigm&#39;;sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)&#39;)% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;;nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, &#39;Too big error&#39;);```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x&#39;,28,28,60000))/255;test_x = double(reshape(test_x&#39;,28,28,10000))/255;train_y = double(train_y&#39;);test_y = double(test_y&#39;);%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you&#39;ll get around 1.2% errorrand(&#39;state&#39;,0)cnn.layers = { struct(&#39;type&#39;, &#39;i&#39;) %input layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 6, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %sub sampling layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 12, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, &#39;Too big error&#39;);```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, &#39;Too big error&#39;);%% ex2 neural net with L2 weight decayrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex3 neural net with dropoutrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex4 neural net with sigmoid activation functionrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex5 plotting functionalityrand(&#39;state&#39;,0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = &#39;softmax&#39;; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand(&#39;state&#39;,0)nn = nnsetup([784 20 10]); nn.output = &#39;softmax&#39;; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

NodeJS 简介:Node.Js Hello World 程序

本文将介绍特定于 Node 的概念,并构建创建工作程序的方法。在整个项目中使用相同的语言可以节省库的时间,从而在后端服务器和前端项目之间更有效地进行通信。这是用 Node.js 编写您的第一个 Hello world 程序的最重要和最基本的先决条件。安装Node.js的方法取决于您使用的操作系统。导入运行程序所需的模块。现在,在用 Nodejs 编写您的第一个 Hello world 程序并听取用户的意见后,所有基础知识都很清楚了。上述输出中的环境变量取决于您的系统环境和配置,并且对于不同的系统可能不同。

新华编程特战队 2008

node.js 初识node.js,运行在服务端的 JavaScript(一)

文章目录1.浏览器原理2.浏览器访问服务器过程3.web开发本质4.什么是node.js?5.node.js有哪些特点?6.安装Node.js 1.浏览器原理 2.浏览器访问服务器过程 https://edu.aliyun.com/lesson_1730_14083?spm=5176.10731542.0.0.4fb815f2VGm9PU#_14083 请求报文和相应报文。 3.web开发本质 一般web都是下面三点一样: 1.请求,客户端发起请求。 2.处理,服务器处理请求。 3.响应,服务器将处理结果

探索技术与实践的旅程,分享编程经验与工具使用心得,助力开发者提升技能。 1万+

探索Jering.Javascript.NodeJS:C与Node.js的无缝结合

探索Jering.Javascript.NodeJS:C#与Node.js的无缝结合 在这个跨平台和多语言交织的时代,开发人员经常需要在不同的技术栈之间协同工作。为此,我们很荣幸向您推荐Jering.Javascript.NodeJS,这是一个让您可以直接从C#代码中调用Node.js JavaScript库和脚本的强大工具。 项目介绍 Jering.Javascript.NodeJS 是一个开源...

gitblog_00039的博客 630

【Nodejs】Node.js简介

Node 的重要性已经不言而喻,很多互联网公司都已经有大量的高性能系统运行在 Node 之上。Node 凭借其单线程、异步等举措实现了极高的性能基准。此外,目前最为流行的 Web 开发模式是前后端分离的形式,即前端开发者与后端开发者在自己喜欢的 IDE 上独立进行开发,然后通过 HTTP 或是 RPC 等方式实现数据与流程的交互。

DomCode 5359

node.js和javascript的关系

node.js是一个基于 Chrome V8引擎的 JavaScript 运行时环境 一、类比JavaScript和java JavaScript java V8 JVM node.js JRE JavaScript和java都是一门编程语言,至于两者的关系,是雷锋和雷峰塔的关系 V8是google开源的JavaScript引擎,用于执行JavaScript,...

【小石头的茅坑】 71万+

node.js和JavaScript的关系

1. 什么是node.js node.js是一个基于 Chrome V8 引擎的 JavaScript 运行时的环境。 2. 什么是JavaScript 2.1比较JavaScript 和 Java 两者之间没有关系 V8是google开源的JavaScript引擎,用于执行JavaScript;类似JVM执行java字节码。在node.js 诞生之前,V8是内置于Chromeium中的,现在也...

weixin_41160054的博客 5508

Kotlin与Node.js的完美结合:kotlinx-nodejs项目推荐

Kotlin与Node.js的完美结合:kotlinx-nodejs项目推荐 项目介绍 kotlinx-nodejs 是一个开源项目,旨在为使用Kotlin编写JavaScript代码的开发者提供对Node.js API的外部声明。通过这个项目,开发者可以在Kotlin代码中直接调用Node.js的API,从而实现更高效的开发体验。该项目目前处于实验阶段,但已经具备了基本的编译功能,并且正在不断完...

gitblog_00219的博客 894

Node.js 起步项目推荐

Node.js 起步项目推荐 本文将为您介绍一个实用的Node.js项目起步框架——Node.js Starter,该项目旨在帮助开发者快速搭建适用于大多数Node.js项目的框架。 1. 项目基础介绍及编程语言 Node.js Starter 是一个开源项目,由Akhil Sharma创建并维护。该项目使用的主要编程语言是JavaScript,基于Node.js平台。它为开发者提供了一个结构良好...

gitblog_00170的博客 877

Node.js 开源项目教程

Node.js 开源项目教程 项目介绍 Node.js 是一个开源的、跨平台的 JavaScript 运行时环境,它允许开发者使用 JavaScript 编写服务器端代码。Node.js 基于 Chrome 的 V8 JavaScript 引擎,提供了事件驱动和非阻塞 I/O 模型,使其轻量且高效,非常适合构建可扩展的网络应用程序。 项目快速启动 安装 Node.js 首先,你需要在你的机器上安装...

gitblog_00849的博客 888

NodeJS 简介:什么是Node.js?

Node.js 由Ryan Dahl于 2009 年首次创建,大约在 Netscape 的第一个服务器端 JavaScript 环境 LiveWire Pro Web 推出 13 年后。Node.js 的第一个版本支持 Linux 和 Mac OS X。它的开发和维护由 Ryan Dahl 领导,后来得到 Joyent 的支持。Node.js 是一个开源框架,用于构建快速且可扩展的服务器端JavaScript 应用程序。Ryan Dahl 于 2009 年创建了Node.js框架。

新华编程特战队 1674

【Node.Js】开源跨平台的JavaScript运行环境

Node.js 是一个基于 Chrome V8 JavaScript 引擎的 JavaScript 运行时环境。Node.js 主要用于构建高性能的网络应用程序,尤其是 I/O 密集型的应用,如实时聊天、流媒体、RESTful API 等。综合以上原因,Node.js 因其高效的性能、丰富的生态系统和强大的实时处理能力,成为了现代 web 开发中的重要技术选择,特别是在需要快速开发、实时交互和高并发处理的场景中。需要 Node.js 技术的原因主要体现在其独特的特性、广泛的应用场景以及开发者体验的提升上。

科马的博客 1845
上一篇: 实战:使用 React 实现渐进式加载图片
下一篇: 如何在TypeScript中使用类型保护
蟹蟹蟹风流
蟹蟹蟹风流 优质创作者: 编程框架技术领域 优质创作者: 编程框架技术领域 领域专家: 前端开发技术领域 领域专家: 前端开发技术领域
博客等级 码龄11年 3万+粉丝 396原创
评论 20
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蟹蟹蟹风流

期望和你分享一杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值