从零搭建 Node.js 企业级 Web 服务器(八):网络安全_第1页
从零搭建 Node.js 企业级 Web 服务器(八):网络安全_第2页
从零搭建 Node.js 企业级 Web 服务器(八):网络安全_第3页
从零搭建 Node.js 企业级 Web 服务器(八):网络安全_第4页
从零搭建 Node.js 企业级 Web 服务器(八):网络安全_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、关于网络平安计算机网络依据TCP/IP协议栈分为了物理层、网络层、传输层、应用层,通常 基础设施供应商会解决好前三层的网络平安问题,需要开发者自行解决应用层的 网络平安问题,本章将着重表述应用层常见的网络平安问题及处理方法。应用层传输层网络层物理层常见的应用层攻击手段XSSXSS (cross-site scripting),跨站脚本攻击,通过在页面中注入脚本发起攻击。 举个例子:我在一个有XSS缺陷的在线商城开了一家店铺,编辑商品详情页时 提交了这样的描述:特制辣酱scriptSYC= s:/cross-sitescfipting/attack.js/scyipt, 当用户访问该商品的详情时

2、attack.就被执行了,我通过该脚本可以在用户不知 情的情况下窃取数据或者发起操作,比方:把用户正在浏览的商品加入到购物车。CSRFcovst sk。?以 = req.p4r“MS;const success = await tkk.skopScrvice.KCMO/e( id: skop/d );if (,sccess) %s.s 仅 s(4O4);)res.se八d( success );!);post = cc(sg八c (%知 res) = co八st 八ame = ireq,body;网(await createShopForvScl const c -八cw ShopCoitro

3、llerO;return await c.hit。;);再次尝试XSS攻击2广州酒家V,Mg,匕=,o八error=a/ertXSS攻击2成功: 0 O localhost:9000 。 Incognito店铺列表:良品铺子输入新的店铺名称I确认修改删除店铺来伊份I输入新的店铺名称三只松鼠 输入新的店铺名旅美珍香碑认修改删除店铺碑认修改删除店铺输入新的店铺名称确认修改删除店铺店铺新增:新店铺的名称:确认新增这样就可以抵御XSS攻击了,现在再预防一下CSRF攻击:/ src/middlewares/iiadex.jsconst Router = rcqaireCcxpress);covst co

4、okieParser = YcqiAiMcookic -padck);+c(mst bodyparser =requirehodycsurf = reu/recsurP);c。八st sessionMidcUewaY。= KcqeC./sess(。);c。八st r7八orvwa2cMidd/ew4KC = re6/uire./urfvorwaIize,y);const logi八Middleware =%篦砥/切);coist authMiddleware = %抑匕(。/4仍。;const secret =%42dqi8ccd工888c5455Ofqq3077c3四6。8fll4马hoda

5、/e.cxports = async 八cti。八 icitMiddlewaires。const router = RouterQ;KOteK.se(”norMzcMidd/cware0);ro(AterMse(cookieParser(secret);KOtCK.se(sessionMidd/ew4rc(sec%);router. sc(7ogih Midd/cwqreO);KOteK.sc(atkMidd/ew4Kc0);+ roo(terMse(bodyParserMrlecoded( extended: false ), csrf();return router;/ s rc/c oc

6、troi Ie rs/cs rf.jsco ist Router = requi regexp ressz);class CsrfC。八Woiler asyinc i八it() co八st router = RouterQ;ro(Ater.get(7scriptf,加s.getSwipt);ret”匕八 router;)getScript =町 res) = ires.tgpeCjC);rcs.se 八 d(w 证 dow._CSRF_TOKEN_ 二夕req.csrHokc 八 01;););)Modnle.cxports = 4sg八c () = co八st c =八cw CsirfC。八

7、tHohir。;return await c.iiitQ);const parse = reufreurf);koda/e.cxports = fixncti。八(ogi八Mi4cUcwarc(hokvxepagePath =(ogMPath = 77ogi 八wliteList = ,/5OO.ktMp: gctJ)/api/hcalth: get什/api/csrf/scHpt: get7api/logiiaf: post“api/logM/githuW: get7api/logi/githb(b/callback,: get1,)/;!- pubic/(ogin.htm(+script

8、sre=*7api/csrf/scnptMethod=post actio八=/api/login+scriptdocMCht.WKite(十、i八?tgpc=hidden八4kc=_csrfvabc=吓_CSRF_TOKENJ” /、+);+tbuttoi type=sabMit一键登录八CiithLib 登录/butt。八(Mk kc(=stgleshcet krcf=./i八dex.css” /+ script syc=/api/csYf/scHpt“/sc呻tk 力m/ public/iidex.js/export 4sg八c fiAictioin Mo4ifgShoplcfo(e)

9、const slopld = e.tairget.pareitEleieit.datasetshopld)const 八= e.4电ct.pare八tE/eke八t.qacrgSe/ectorCi八?他await createSlopForvScleiaQ.validate(八mc ); catcl ( Message ) 1).imkHTML = Message;return;)await fetclC/api/skop/$shopld?irLaie=$eicodeUR.lCoipoietaey)yj hctkod: PUT# kcadcrs: + srf-Toke: _CSRF_TOKEN

10、_ ,1);await rcfYeshShopListO;)export “sg八c fiAinctioin KCMoveSkoF伍fo(e) 。八st shopld = e.target.pareitElei,当用户访问到这条回复时iwg标签就会在 用户不知情的情况下以该用户的身份发起提前设置的请求,比方:转1积分到 我自己的帐号上。SQLiSQLi( SQL injection), SQL注入,通过在数据库操作注入SQL片段发起攻击。 SQLi是非常危险的攻击,可以绕过系统中的各种限制直接对数据进行窃取和篡 改。但同时,SQLi又是比较容易防范的,只要对入参字符串做好转义处理就可 以规避,

11、常见的ORM模块都做好了此类处理。DoSDoS (denial-of-service),拒绝服务攻击,通过大量的无效访问让应用陷入瘫 痪。在 DoS 基础上又有 DDoS (distributed denial-of-service),分布式拒绝 服务攻击,是加强版的DoSo通常此类攻击在传输层就已经做好了过滤,应用 层一般在集群入口也做了过滤,应用节点不需要再关心。攻击测试再回到上一章已完成的工程 hostl-tech/nodejs-server-examples -07-authentication,当前的店铺管理功恰好因为店铺名称长度校验限制和没有基于 get的变更接口而一定程度上规避了

12、 XSS和CSRF缺陷,另外因为数据库访问基于ORM实现也基本规避了 SQLi缺陷。现在把长度校验放松以进行XSS攻击测试:/ shc/ha。川ds/Sko?FoK3jsconst Y“ = irequiveCgiAp);cx?orts.c%ateSkopForwSckcM4 = 0 二Yup.object(八“hac: Yap.st%八g()店铺名不能为空9.小心(3J店铺名至少3个字符,) 4X(12。店铺名不可超过12。字,!);XSS攻击1百草味5例加rt,XSS攻击1成功:确认新增 C O localhost:9000店铺列表:良品铺子I输入新的店铺名称I确认修改删除店铺来伊份I输入

13、新的店铺名称I确认修改删除店铺三只松鼠输入新的店铺名称I确认修改删除店铺美珍香输入新的店铺名称确认修改删除店铺店铺新增:新店铺的名称:XSS攻击2广州酒家沁g 6%二_ o八匕二HcrtXSS攻击2成功:店铺列表:良品铺子I输入新的店铺名称来伊份I输入新的店铺名称三只松鼠输入新的店铺名旅美珍香碑认修改删除店铺碑认修改删除店铺确认修改删除店铺输入新的店铺名称碑认修改删除店铺店铺新增:新店铺的名称:新I确认新增基于innerHTML更新DOM时script标签不会执行(详见标准),所以XSS攻击1无效。在换了新的写法后,XSS攻击2就生效了。强化网络平安接下来通过esc叩e-html、csurf、

14、helmet对当前工程的网络平安进行强化,在 工程根目录执行以下安装命令:$ g4m add escape# 本地安装 escape-hti/vd、csu-f、info Direct dcpc八dcAcies| csKfLllQ| escape对店铺信息输出做转义处理:/ skc/力k/esc即八一。句比拉。八st escapcH力m/ = requireCescapemod/e.cx?orts = 八cti。八 escapcHtmll八Objt(i”L(t) /尝试将ORM对象转化为普通对象try Mput = i 八 pnt.toJSON(); catcl outpc(tk = cscap

15、cHM(l 八。好 ect(Mpb(tk);1);return output; else if (tgpeof Mpixt 二二string) return esca?cHtiW(7八?t); else (return Mp此/ wc/c。八仅ohd/shop.jscoiast Router )=必川砥或?烟5);cohst bodyPairser = requiirembody -parser1);const shopService - Kcqi%C./scrvices/sk。?);covst createShopForScheia = rcqiKeC./k0”/ds/SkopFori4V)

16、;const cc = Kcqc(J/,力k/cc);+c。八st cscapcHtmll八。bjcct =KeqiAike(./iAti(s/escapc-htm(-iA-o3ect);class Shop。八tell。丫 shopSenice;“sg八c iiitQ this.shopScr/icc = await skopServicc。;const router = RouterQ;roatCK.g况(Vthis.getAM);丫。(Ater.gct(/:shopldL 丽s.get。八c);丫oiAter.pb(tC/:shop【4j 加s.pat);丫。认ter.dcleteC/:

17、shopldL thisde(etc);iro(Ater.post(/L bodgPadcc”“。八codcd( extended: false )this.post);return router;get Al I 二 cc(asg 八 c (匕町 res) = const pageMdeX) pageSizc = rcq.qacrg;c。八 st shop Li st - await八 d( pagel八 dex, pageSizc );-rcs.se h d( success: true, data: shop Li st );+ycs.sc 八 H(escapeHtM( I 八Obj c

18、ct( success:true, data: shopList );!);get。八e = cc(sg八c (匕町 res) = coist shopld ) = req.paira;const shop Li st = await八 d( id: shopld );if (shopUst.lc八gtK) -rcs.sc八d( success: true, data: shopUst0 ?);十Hes.seAd(escapeHtM(MObjcct( success: true, data: shop List。 ); eke (rcs.s仇(s(4O4).se八d( success: false, data:八 );)1);put = cc(“sg八c (req, res) = c。八st shop以 = req.params;const 八4加0 = wq.qucKg;岫(await cireateShopForiScheiaQ.validate(八); catch (c) KCS.st4ts(4OO).seiad( success: fak message: e.e

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论