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

东莞网站搭建哪家强php网站开发实例教程思考题

东莞网站搭建哪家强,php网站开发实例教程思考题,网站建设一个下载链接,制作网站怎么做导航栏在这个 JavaScript 示例中#xff0c;有两个对象#xff1a;baseUser 和 user。 baseUser 对象定义如下#xff1a; baseUser { a: 1 } 这个对象有一个属性 a#xff0c;其值为 1#xff0c;没有显式指定原型对象#xff0c;因此它将默认继承 Object.prototype。 …在这个 JavaScript 示例中有两个对象baseUser 和 user。 baseUser 对象定义如下 baseUser {     a: 1 } 这个对象有一个属性 a其值为 1没有显式指定原型对象因此它将默认继承 Object.prototype。 user 对象定义如下 user {     a: 2,     b: 1,     __proto__: {         c: 3     } } 这个对象有三个属性 a: 值为 2覆盖了从 baseUser 继承过来的同名属性如果有继承关系的话。 b: 值为 1这是 user 自身特有的属性。 __proto__: 这是一个指向原型对象的引用这里将其设置为一个包含 c: 3 属性的对象。这意味着 user 对象会从这个新的原型对象中查找自身没有的属性。 因此当尝试访问 user.c 时JavaScript 引擎会在 user 对象自身找不到 c 属性时向上搜索其原型链最终在 user.__proto__ 找到并返回值 3。 注意直接修改 __proto__ 属性虽然可以动态改变对象的原型但在严格模式下不推荐这样做现代 JavaScript 开发中更倾向于使用 Object.create() 或 class 关键字来更安全地操作原型链。 let newUser Object.assign({}, baseUser, user); target作为 Object.assign() 参数提供的空对象 {}。这将作为属性复制的目的地。 source1baseUser 对象。 source2user 对象。 这段代码执行的操作可概括如下 创建一个新的空对象 ({})。 将 baseUser 中的所有可枚举自有属性复制到新对象中。 将 user 中的所有可枚举自有属性复制到新对象中。如果有任何重叠的键如本例中的 a来自 user 的值会覆盖 baseUser 中的值。 生成的 newUser 对象 执行 Object.assign() 调用后newUser 对象将具有以下属性 a取值为 user 中的 2因为它覆盖了 baseUser 的 a。 b取值为 user 中的 1因为它是 user 特有的。 一个原型链其中包含从 user.__proto__ 继承的 c: 3 属性。 总结来说语句 let newUser Object.assign({}, baseUser, user); 通过合并 baseUser 和 user 的属性创建了一个新对象 newUser当键重叠时优先采用 user 中的属性值。生成的 newUser 对象还继承自 user.__proto__。 // 浅复制一个对象第一个参数位是对象的内容后面的参数位是多个对象内容叠加进去进行复制出一个全新的对象 let newUser Object.assign({}, baseUser, user)   // 输出结果为{a:2,b:1}无污染 console.log(newUser)  // {a: 2, b: 1}   console.log(newUser.__proto__)   //{constructor: ƒ, __defineGetter__: ƒ, __defineSetter__: ƒ, hasOwnProperty: ƒ, __lookupGetter__: ƒ, …} 污染时 baseUser {a:1 }user JSON.parse( {a : 2 , b : 3 , __proto__ : { c : 4 }} ) let newUser Object.assign({}, baseUser, user)console.log(newUser)//输出{a: 2, b: 1}console.log(newUser.__proto__) //被污染输出{c: 4}而__proto__没有被输出的原因是它为隐藏属性 console.log(newUser): 此行将打印合并后的newUser对象。由于Object.assign({}, baseUser, user)将baseUser和user对象的属性合并到一个新对象中其中user对象的属性值会覆盖相同名称的baseUser属性值。所以newUser对象应具有以下属性 a: 值为2来自user对象覆盖了baseUser的a: 1 b: 值为3直接来自user对象 结果输出为{ a: 2, b: 3 } console.log(newUser.__proto__): 此行将打印newUser对象的原型__proto__。由于user对象的JSON字符串中包含了__proto__键其值为一个包含c: 4的对象这将在创建user对象时被解析并设置其原型。当newUser通过Object.assign()继承user的属性时也会继承其原型链。因此newUser.__proto__应该是一个包含c: 4的对象{ c: 4 }我们以知识点的利用为主查看源代码 // post请求的路径 app.post(/register, (req, res) {let user JSON.parse(req.body) // 将输入的账号密码从json字符串转成对象// 判断有没有输入账号和密码if (!user.username || !user.password) { return res.json({ msg: empty username or password, err: true })}// 判断账号是否存在总对象的username里若注册时输入的用户名相同则输出用户名已存在if (users.filter(u u.username user.username).length) { return res.json({ msg: username already exists, err: true })}//如果用户是管理员但邀请码不匹配会将 user.isAdmin 设为 false并返回一个错误的 JSON 响应。 //由于邀请码是常量 INVITE_CODE其值在代码执行期间不会发生变化。这意味着无论用户提交的邀请码是什么其与 INVITE_CODE 的比较结果将在代码执行前就已经确定。因此无论用户如何构造输入都不能通过修改邀请码来改变条件判断的结果防止了SQL注入。if (user.isAdmin user.inviteCode ! INVITE_CODE) {user.isAdmin falsereturn res.json({ msg: invalid invite code, err: true })}// 使用系统函数复制对象打包成一个新的对象let newUser Object.assign({}, baseUser, user)users.push(newUser) // 存到总对象里res.json({ msg: user created successfully, err: false }) // 设置返回信息 })若isAdmin的属性是true则它为管理员否则为普通用户于是我们可构造污染。 注册页面抓包 {username:1,password:1,isAdmin:true,inviteCode:11} 构造为 {username:2,password:1, __proto__:{ isAdmin:true } } //由于之前注册过username为1若重新注册会回显exist因此这里将username修改为2 污染成功 重新登录得到flag 总结 该题考察JavaScript 原型链污染Nodejs原型链污染
http://www.w-s-a.com/news/433676/

相关文章:

  • 如何让新网站快速收录企业建站的作用是什么
  • 在线制作简历的网站做的最好的微电影网站
  • h5制作的网站网络游戏投诉平台
  • 做外贸网站好还是内贸网站好珠海新盈科技有限公 网站建设
  • php和网站开发网络软营销
  • 大型做网站的公司有哪些wordpress注册链接无效
  • 推荐门户网站建设公司网站开发移动端
  • 公司网站的栏目设置成都十大监理公司排名
  • 安溪住房和城乡建设网站关岭县建设局网站
  • 网站域名注销备案徐州房产网
  • 筑聘网windows优化大师自动安装
  • 龙华高端网站设计门户网站建设方案公司
  • 网站开发作用网站建设哪家专业
  • 网站设计报告总结南宁商城网站推广公司
  • 淘宝做店招的网站免费网站建设自助建站
  • 重庆工信部网站绵阳公司网站建设
  • 购物网站开发流程制作企业网页
  • 定州哪里可以做网站建设项目环境影响登记表备案系统网站
  • 网站建设费属于广告费小猪网站怎么做的
  • 国内优秀设计网站站长哈尔滨微网站建设
  • 如何建设一个优秀的电商网站沐风seo
  • 从零开始学网站建设知乎安防网站下载
  • 打开网站弹出qq应用软件有哪些
  • 温州网站建设seo网站 如何做 中英文切换
  • 聊城做网站的公司资讯信阳 网站建设
  • 天津市工程建设交易网站查汗国珠海 网页设计
  • 龙果学院大型网站稳定性建设汾阳做网站
  • 湖北 个人网站备案时间域名查询备案查询
  • 网站推广方式校园网站怎么建
  • 长沙seo网站排名怎么在百度发帖