第三十天 NODE.js的使用 node 编写登录页面 文件管理 数据库互联 以及 相应的安全问题

news/2024/11/27 11:10:36/

前言 

学习node.js  就是因为这个  node.js 和前端的js是不同的  因为他是运行在 服务器端的   而前端的只能运行在 浏览器  前端的js 很容易就被捕捉内容 但是  node.js  其实和php一样  我们学习的目的就是 以后碰到这样的 问题 会解决  也要了解  node.js 相应的安全问题

node.js的基础知识的学习

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>后台登录</title><style>body {background-color: #f1f1f1;}.login {width: 400px;margin: 100px auto;background-color: #fff;border-radius: 5px;box-shadow: 0 0 10px rgba(0,0,0,0.3);padding: 30px;}.login h2 {text-align: center;font-size: 2em;margin-bottom: 30px;}.login label {display: block;margin-bottom: 20px;font-size: 1.2em;}.login input[type="text"], .login input[type="password"] {width: 100%;padding: 10px;border: 1px solid #ccc;border-radius: 5px;font-size: 1.2em;margin-bottom: 20px;}.login input[type="submit"] {background-color: #2ecc71;color: #fff;border: none;padding: 10px 20px;border-radius: 5px;font-size: 1.2em;cursor: pointer;}.login input[type="submit"]:hover {background-color: #27ae60;}</style>
</head>
<body>
<div class="login" ><h2>后台登录</h2><form action="" method=""><label for="username">用户名:</label><input type="text" name="username" id="username"  class="user"><label for="password">密码:</label><input type="password" name="password" id="password" class="pass" ><button>  登录  </button></form>  
</div>

上边是个 登录页面的html 我们复制到 sql.html  此外还需要创建 sql.js  file.js   file.txt    zuse.js  在开发之前呢先学习一下  node.js的简单使用

node.js的使用手册  

https://www.w3cschool.cn/nodejs/

首先呢就是了解  node.js的自建服务器机制和请求响应包的获取,node.js 的应用其实就是调用 模块 来帮助我们完成

1、服务器的创建

我们先  创建个sql.html 装上上边的代码  在创建个sql.js 写入以下代码     : 服务的创建并绑定 3000 端口

代码如下  : 

var http = require('http')   //定义个 http 让其包含(require 包含函数) 

执行完成之后  我们不是调用了模块吗   然后这个模块其实是 不存在在这里的 需要我们自己下载 

演示一下 :

安装完 可以  npm list -g 查看

直接回车 就可以下载了  如果报错 请看我上个文章   

调用完模块  我就进行页面的创建

http.createSever(function(req,res){    //http的创建  function(req,res)  是自带的函数 意思就是获取请求和响应   //因为我们这个页面不需要交互所以只给  响应就可以了 res.writeHead(200,{'Content-Type':'text/html'});  //给与返回的内容 为'text'res.end('hello myfist node.js');    //发送的请求信息 }).listen(3000);    //把网站搭建在  3000端口console.log('3000 端口已开启') ;    //验证端口开启是否成功

然后运行一下试试

运行一下 要访问127.0.0.1:3000

Node.js 解释器 REPL

就是我们的node.js  其实也是一个终端的命令行  

演示一下  : 

NODE.js 回调函数

理解 同步(你给一个req 我给你一个 res  ) 异步(你给我一个 req  我让别人干完活之后一块给你 res)   阻塞(你给我个req  我很忙我先让你等等  通话挂起 你直到收到我的res 才进行下一步)

非阻塞 (和上边相反)(看了就懂)彻底理解同步、异步、阻塞和非阻塞的概念_同步异步、阻塞非阻塞-CSDN博客

实例 

阻塞(单线程) : 

JavaScript toString() 方法 | 菜鸟教程

非阻塞:

说到这

就先搞个文件夹的打开的执行  以及文件的遍历漏洞(允许攻击者在未授权的状态下读取应用服务上任意文件的安全漏洞)

//文件的遍历
var fs = require ('fs');    //导入文件管理模块
var express = require('express')    //导入 express 框架(这个框架后边说)
var app=express();            
function filemanage(dir)        定义一个函数 我们传入一个 dir  以为之后我们需要他来执行打开我们指定的目录
{ fs.readdir(dir,function(error,files){       //利用Fs自带的读取功能   读取并输出  filesconsole.log(files);  }); }
app.get('/',function(req,res){    //var dir=req.query.dir;
console.log(dir);    //输出 目录
filemanage(dir);     //调用打开文件夹函数})

运行一下

回车  哎?你妹的怎么没反应啊  什么情况  我们看看vs code

你妹的什么情况裤衩都被爆出来了  ;  这个就是文件的遍历漏洞 搞一搞 c盘  爆东西了

Express框架 &&node.js 开发登录页面 

第一步还是先下载模块   

因为我下了一次了  所以会报已经存在的错

下面展示一下  express 的简单应用  :

然后开启 node ./sql.js 得到这个页面 是因为我们没有 进行get 传参   那我们传参一下

给予了请求,  那这样 我们就可以直

app.get('/',function(req,res){     //如果get路径是当前  就给与请求文件
res.sendFile(__dirname+"/","sql.html")      //sql.html 是我们的一个登录界面});

接让当前页面显示个别的页面不可以吗?  当然可以

技巧 : 一般的文件路径都用  " "  进行包裹  

完成这个之后我们就来演示一下  get  数据的传输   就是在我们刚刚这个页面去写入数据 然后 我们要用 js 接收 数据可以先判断一下  之后我们就可以进行数据库互联

然后下一步 就是把username 和pass  传输到后台就行了  这边我们演示get  类型的

然后我们需要  对html进行修改了

修改为 login   //  因为我们是 get 接收login时触发 上边的函数  就可以运行玩一玩

‘/login’原理  就是 我们刚刚html的指向不是 上边这个吗 我们输入账号密码登录的时候就会触发  上边的 login(直接进入 http://127.0.0.1:3000/login ? 账号=xxx && 密码=xxx)

get不是重点  我们主要是进行 post方式联动数据库

node.js   Post 传输 数据库内容的显示 和简单的 or SQl注入

先修改一下 html 的method传输方式  

引用 body 模块进行post 传输 

var mysql = require('mysql');   //引用数据库模块var bodyParser = require('body')     //Parser  是解析器的意思
var urlencodedParser = bodyParser.urlencoded({ extended: false })   // 这个是url 加密的app.post('/login',urlencodedParser,function(req,res){    //这边这样书写 const u = req.body.username;const p = req.body.password;     //数据传输方式的不同  get使用query   post使用bodyconsole.log(u);console.log(p);
// 利用模块 进行数据库的连接    
var connection = mysql.createConnection({host     : 'localhost',user     : 'root',password : '123456',database : 'demo01'});
// 进行连接之后我们就得进行 登录判断  这个判断的值是从数据库取出来的 (也可以这么想 就是 我们输入的 数据  他会进行一个查询  如 select * from admin where u=xxx and p=xxx  如果有数据返回就让你进 (这种是常用的模式))
// 后台验证 connection.connect();  
var sql ='select * from admin where username="+u" and password="+p"'; // 这边注意就是 "+u" 这边是看见发蓝就是对的  //这是个拼接 把我们定义的 u , p 拼接到数据库里   //node.js 多用这个拼接console.log(sql);  // 把查找进行输出到console
connection.query(sql,function(error,date){     //连接之后 进行数据库的操作if(error){console.log('数据库连接失败!');} try{if(u==(data[0]['username']) && p==data[0]['password']){    // try   catch就是一种  测试  现在这个判断就是直接进行数据的对比   不是判断数据是不是为有和没有res.send('欢迎进入后台管理页面');}}catch{res.send('错误');};}});

然后我们就是   打开 phpstudy  打开数据库   然后使用  navicat 连接数据库    没创建的可以自己创建

好了连接一下试试    

随便输入账号密码     输入正确的

然后就是简单的sql注入  前提  1、是这个数据库使用了  拼接  2、

判断模式(第一种 就是 拼接我们的输入数据 进入判断 是不是在 数据库里有  匹配   结果以返回值 是不是有为判断   能不能放你登录   第二种就是 真实利用  数据库里的你查找出来的东西和你的输入进行  ==  对了就让你进  不对不让你进)为 第一种  ;

最简单的注入   就是   x'or1=1 #     

解析一下    我们输入的账号密码   select * from admin where name='xxxx  aor1=1 #' and password='123456'

这个就是  逻辑判断     xxxx or 1=1   这个就是判断正确与错误   我们输入的是假密码 但是 or 逻辑 有一个对的就是真的   现在这个账号就是正确的了      # and  password='123456'   //这个就是注释后边的内容   这样就只剩下了 前边的逻辑    我们这个代码 用不了  因为有个判断

(u==(data[0]['username']) && p==data[0]['password'])    这样我们注入  之后还是错的

讲个例题 sql注入
BUUCTF在线评测

web题的第一个  简单的sql注入

那我们直接玩一玩吧      利用我们分析的逻辑      直接进行注入

直接登录   flag直接出来

其实还有一步就是   判断  注入点   是  '  还是  "   简单的就是  直接  a'    a''试一试

输入点  a'   直接出来这个  那就是注入点

有兴趣的可以玩一玩sql注入   下边这个是一些注入的万能密码https://zhuanlan.zhihu.com/p/485448815#:~:text=%E3%80%90%E5%8F%8C%E5%BC%95%E5%8F%B7%E5%AD%97%E7%AC%A6%E5%9E%8B%E4%B8%87%E8%83%BD%E5%AF%86%E7%A0%81%E3%80%91%20a%22%20or%20true%20#%20a%22%20or%201,a%20a%22%20or%201=1%20--%20a%201.1%20%E4%B8%87%E8%83%BD%E8%B4%A6%E5%8F%B7%E7%9A%84%E4%BD%BF%E7%94%A8

最后一个

node.js 进行系统命令的调用   |  RCE注入

上边我们说了   node.js其实就是个终端

这个系统命令的调用 演示一下  先下载模块

利用的命令 是   exec  这个可以记一下    

和大家说一说  就是 为什么使用函数  都是有个 . 呀  这个就是rce  是个主模块  exec是它里边的东西 (我们可以叫他方法  这个就涉及到 原型对象(可以存储模块的方法) )   这个可以调用系统的命令  调用一下玩玩

计算机 弹出

上边这个 rce命令   再一个就是下边的RCE代码执行

eval  这个就是个危险命令  以后看着就偷着笑吧      他会把文本的输出解析(就是这个毛病造成了代码的注入)

再一个就是两种 组合的注入   eval("require('child_process').exec('calc')")

总结

  : 为什么学这个node.js 都没有什么服务器用这个破玩意    哎呀  要是遇到了呀 会看代码  是吧   能知道点东西   查查模块 是不是    要是不了解 那你妹的连模块也不知道 那不废了吗


http://www.ppmy.cn/news/1550331.html

相关文章

摄像头原始数据读取——ffmpeg(av_read_frame)

摄像头原始数据读取——ffmpeg(av_read_frame) 测试代码test.cpp #include <iostream> #include <stdio.h> #include <string.h>#ifdef __cplusplus extern "C" { #endif #include "libavdevice/avdevice.h" #include <libavcodec/…

51单片机从入门到精通:理论与实践指南入门篇(二)

续51单片机从入门到精通&#xff1a;理论与实践指南&#xff08;一&#xff09;https://blog.csdn.net/speaking_me/article/details/144067372 第一篇总体给大家在&#xff08;全局&#xff09;总体上讲解了一下51单片机&#xff0c;那么接下来几天结束详细讲解&#xff0c;从…

【Git】常用命令汇总

目录 一.安装及配置 1.在 Windows 上安装 2.用户信息 3.差异分析工具 二.基础 1.创建仓库 2.提交与修改 三.分支管理 1.创建分支 2.合并分支 四.远程操作 1.管理 Git 仓库中的远程仓库 2.数据的获取与推送 五.标签 1.创建轻量标签和附注标签 2.查看标签和标签信…

Dubbo的RPC泛化调用

目录 一、RPC泛化调用的应用场景 二、Dubbo RPC泛化调用的实现原理 三、Dubbo RPC泛化调用的实现步骤 四、示例代码 五、泛化调用怎么发现提供该接口的服务及服务的IP和端口&#xff1f; Dubbo的RPC泛化调用是一种在调用方没有服务方提供的API的情况下&#xff0c;对服务方…

路由策略与路由控制实验

AR1、AR2、AR3在互联接口、Loopback0接口上激活OSPF。AR3、AR4属于IS-IS Area 49.0001&#xff0c;这两者都是Level-1路由器&#xff0c;AR3、AR4的系统ID采用0000.0000.000x格式&#xff0c;其中x为设备编号 AR1上存在三个业务网段A、B、C&#xff08;分别用Loopback1、2、3接…

基于eBPF的微服务网络安全

一些开源的kubernetes工具已经开始使用eBPF&#xff0c;这些工具大多数与网络&#xff0c;监控和安全相关。 本文不会涵盖eBPF的方方面面&#xff0c;只作为一个入门指南&#xff0c;包括Linux内核的BPF概念&#xff0c;到将该功能加入到微服务环境的优势&#xff0c;以及当前…

Linux中的“块”是什么

在Linux系统中&#xff0c;块&#xff08;block&#xff09;是文件系统存储数据的基本单位&#xff0c;以下是关于Linux中块的概念和使用场景的详细解释&#xff1a; 一、块的概念 定义&#xff1a;块是多个连续性的扇区&#xff08;sector&#xff09;组成&#xff0c;扇区是…

【Python爬虫实战】深入解析 Scrapy:从阻塞与非阻塞到高效爬取的实战指南

&#x1f308;个人主页&#xff1a;易辰君-CSDN博客 &#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/2401_86688088/category_12797772.html ​ 目录 前言 一、阻塞和非阻塞 &#xff08;一&#xff09;阻塞 &#xff08;二&#xff09;非阻塞 二、Scrapy的工作…