关于网站安全:如何通过部署正确的网站安全来避免不必要的损失

<article class=“article fmt article-content”><p>什么是网站平安?<br/>网站平安是指爱护集体和组织面向公众的网站免受网络攻击。</p><p>为什么要关怀网站平安?<br/>针对面向公众的网站(无论规模大小)的网络攻击很常见,可能会导致:</p><p>网站污损,<br/>失去网站可用性或拒绝服务 (DoS) 条件,<br/>泄露敏感的客户或组织数据,<br/>攻击者管制受影响的网站,或<br/>应用网站作为水坑攻打的中转站。<br/>这些威逼会影响信息安全的所有方面——机密性、完整性和可用性——并可能重大侵害网站及其所有者的名誉。例如,成为污损、DoS 或数据泄露受害者的组织和集体网站可能会因用户信任度降落或网站访问者缩小而蒙受经济损失。</p><p>能够采取哪些步骤来避免网站攻打?<br/>平安业余人员应该采取多个步骤来正确爱护他们的网站。留神:组织应与其网站托管提供商或托管服务提供商交谈,以探讨施行安全措施的角色和责任。</p><ol><li>爱护域生态系统。<br/>查看所有域的注册商和域名零碎 (DNS) 记录。<br/>更改您的域注册商和 DNS 提供的所有默认明码。<br/>默认凭据并不平安——它们通常很容易在 Internet 上取得。更改默认用户名和明码将避免利用默认凭据的攻打。(无关创立强明码的信息,请参阅抉择和爱护明码。)<br/>强制执行多重身份验证 (MFA)。(无关更多信息,请参阅补充明码)<br/>监控证书透明度日志。<br/>查看CISA 紧急指令 19-01和CISA Cyber Insights:Mitigate DNS Infrastructure Tampering理解更多信息。</li><li>爱护用户帐户。<br/>对所有可拜访 Internet 的帐户强制执行 MFA — 优先思考具备特权拜访权限的帐户。<br/>执行最小权限准则,禁用不必要的账户和权限。<br/>更改所有默认用户名和明码。<br/>查看CISA Cyber Insights:加强电子邮件和网络安全以理解更多信息。</li><li>继续扫描并修复要害和高破绽。<br/>别离在 15 天和 30 天内修补可拜访互联网的零碎上的所有要害破绽和高破绽。除了软件破绽之外,请务必扫描配置破绽。<br/>尽可能启用自动更新。<br/>替换不受反对的操作系统、应用程序和硬件。</li></ol><p>查看CISA 紧急指令 19-01和CISA Cyber Insights:修复互联网可拜访零碎的破绽以理解更多信息。</p><ol start=“4”><li>爱护传输中的数据。<br/>禁用超文本传输协定 (HTTP);强制执行超文本传输协定平安 (HTTPS) 和 HTTP 严格传输平安 (HSTS)。<br/>网站访问者心愿他们的隐衷失去爱护。为确保网站和用户之间的通信是加密的,请始终强制应用 HTTPS,并在可能的状况下强制应用 HSTS。如需更多信息和领导,请参阅美国首席信息官 (CIO) 和联邦 CIO 委员会对于HTTPS-Only Standard的网页。如果可能,为所有域预加载 HSTS。<br/>禁用弱明码(SSLv2、SSlv3、3DES、RC4)。<br/>查看CISA Binding Operational Directive 18-01和CISA Cyber Insights:Enhanced Email and Web Security理解更多信息。</li><li>备份数据。<br/>采纳备份解决方案,主动、继续地从您的网站备份要害数据和系统配置。<br/>将您的备份媒体保留在平安且物理近程的环境中。<br/>测试劫难复原场景。</li><li>爱护网络应用程序。<br/>辨认并修复前 10 名最要害的 Web 应用程序平安危险;而后转向其余不太重大的破绽。(无关最要害的 Web 应用程序平安危险的列表,请参阅OWASP Top 10。)<br/>启用日志记录并定期审核网站日志以检测安全事件或不当拜访。<br/>将日志发送到集中式日志服务器。<br/>为用户登录 Web 应用程序和底层网站基础设施施行 MFA。</li><li>爱护网络服务器。<br/>应用安全检查表。<br/>依据特定于零碎上每个应用程序(例如,Apache、MySQL)的安全检查表审核和强化配置。<br/>应用应用程序容许列出和禁用提供业务需要不须要的性能的模块或性能。<br/>施行网络分段和隔离。<br/>网络分段和隔离使攻击者更难在连贯的网络中横向挪动。例如,将 Web 服务器搁置在正确配置的非军事区 (DMZ) 中会限度 DMZ 中的零碎与外部公司网络中的零碎之间容许的网络流量类型。<br/>理解您的资产在哪里。<br/>您必须晓得您的资产在哪里能力爱护它们。例如,如果您的数据不须要位于 Web 服务器上,请将其删除以避免公共拜访。<br/>8.接入平安防护产品。<br/>平安减速SCDN(Secure Content Delivery Network)是一种联合了CDN和平安防护性能的服务,为网站提供更疾速、稳固和平安的内容传输。上面是平安减速SCDN常见的性能:</li></ol><p>CDN减速:SCDN利用分布式网络节点,在寰球各地构建服务器集群,将用户申请的内容就近缓存,极大地缩小了网络提早,提供更快的内容传输速度和更好的用户体验。</p><p>DDoS防护:SCDN集成了弱小的DDoS(分布式拒绝服务攻打)防护机制,可能辨认和拦挡歹意流量,爱护网站免受DDoS攻打的影响。</p><p>Web利用防火墙(WAF):SCDN提供WAF性能,能够检测和拦挡各种Web利用攻打,如SQL注入、XSS、CSRF等,爱护网站免受此类攻打的威逼。</p><p>网站平安扫描:SCDN集成了网站平安扫描性能,能够定期扫描网站破绽,并提供具体的破绽报告和倡议,帮忙管理员及时修复破绽,保障网站的平安。</p><p>数据加密和解密:SCDN反对将网站内容进行加密,确保数据在传输过程中的安全性,同时也反对对通过加密的内容进行解密,保障访问者能失常浏览和应用网站。</p><p>镜像站点备份:SCDN能够将网站的内容进行实时或定期的备份,当源站点呈现宕机或故障时,能够疾速切换到备份站点,确保网站的继续可用性。</p><p>反爬虫和歹意机器人拦挡:SCDN能够辨认并拦挡歹意的爬虫和机器人,阻止他们对网站内容进行非法采集和歹意操作。</p><p>总的来说,平安减速SCDN综合了CDN的减速性能和平安防护性能,提供了更牢靠、平安和高效的内容传输服务,爱护网站免受各种网络攻击和歹意行为的威逼。</p><p>还有哪些额定的步骤能够避免网站攻打?</p><p>清理所有用户输出。在客户端和服务器端清理用户输出,例如特殊字符和空字符。当用户输出被合并到脚本或结构化查询语言语句中时,清理用户输出尤其重要。<br/>进步资源可用性。配置网站缓存以优化资源可用性。优化网站的资源可用性会减少它在 DoS 攻打期间接受意外高流量的机会。<br/>施行跨站点脚本 (XSS) 和跨站点申请伪造 (XSRF) 爱护。通过施行 XSS 和 XSRF 爱护来爱护网站零碎以及网站访问者。<br/>施行内容安全策略 (CSP)。网站所有者还应思考施行 CSP。施行 CSP 能够缩小攻击者在最终用户机器上胜利加载和运行歹意 JavaScript 的机会。<br/>审计第三方代码。审核第三方服务(例如,广告、剖析)以验证没有向最终用户提供意外代码。网站所有者应该衡量审查第三方代码并将其托管在 Web 服务器上(而不是从第三方加载代码)的利弊。<br/>施行额定的安全措施。其余措施包含:<br/>针对网站代码和零碎运行动态和动静平安扫描,<br/>部署 Web 应用程序防火墙,<br/>利用内容交付网络来防备歹意网络流量,以及<br/>针对大量流量提供负载平衡和弹性。</p></article> ...

March 4, 2024 · 1 min · jiezi

关于网站安全:应对DDoS攻击快速恢复网站正常运行的关键步骤

当网站蒙受DDoS(分布式拒绝服务)攻打时,可能会导致网站停机、性能降落和用户无法访问等问题,解决DDoS攻打须要采取一系列措施来应答和缓解攻打。 您的网站可能是明天的指标,因为面对DDoS(分布式拒绝服务)攻打是许多网站所有者的挑战。DDoS攻打可能会导致网站停机或者性能降落,给用户体验和在线业务带来重大影响。然而,通过采取一系列无效的措施,您能够疾速复原网站的失常运行,爱护您的在线业务。 第一步:迅速检测和确认攻打 当您发现网站出现异常拜访流量并狐疑蒙受到DDoS攻打时,第一步是迅速应用网络监控工具来确认攻打类型和攻打流量的特色。这有助于确定攻打的规模和持续时间。 第二步:告诉服务提供商和相干合作伙伴 及时告诉您的服务器托管提供商或CDN服务商。他们可能有专门的团队和设施来帮忙您缓解DDoS攻打,并帮助您采取正确的应答措施。或者更换CDN至专门针对网站攻打的平安减速SCDN,是专门针对网站用户蒙受攻打所实用的防护产品。 第三步:启动容灾计划并减少服务容量 采纳容灾计划,例如将网页内容缓存到平安减速SCDN上,以扩散流量并升高服务器压力。同时,您能够减少服务器容量和网络带宽,以应答攻打流量的减少。 第四步:配置网络设备和防火墙 调整防火墙和网络设备的配置以过滤出现异常流量的特色,并将攻打流量隔离。此外,您能够临时敞开一些不必要的服务和端口,以缩小攻击面。 第五步:应用DDoS防护服务 如果您始终是DDoS攻打的指标,思考配置专门的DDoS防护服务。市面上有许多业余的DDoS防护服务供应商,他们提供实时监控和缓解攻打的服务。例如专门针对网站的高防SCDN,是专门针对网站用户蒙受攻打所实用的防护产品。 第六步:单干与信息分享 分享蒙受过DDoS攻打的网站所有者案例和德迅云平安专家进行单干,共享攻打防护教训和无效的缓解计划措施。 总结 DDoS攻打可能会对您的网站和在线业务带来重大影响,但采取上述措施能够最大水平地缩小损失并疾速恢复正常运行。同时,定期进行安全漏洞扫描和强化您的安全策略也是预防DDoS攻打的重要伎俩。通过综合的安全措施,您能够更好地爱护您的网站和在线业务,及时应答各种平安威逼。 心愿以上步骤和倡议可能帮忙您应答DDoS攻打,并确保您的网站在面对平安威逼时可能放弃高效、平安的运行。

February 17, 2024 · 1 min · jiezi

关于网站安全:SiteLock九个常见问题

1.SiteLock是什么?SiteLock是一个基于云的网站平安解决方案,实用于各种类型网站。它能够作为恶意软件注入,机器人攻打等常见在线威逼的晚期检测警报,全面爱护网站免受黑客和恶意软件的威逼的同时还能够修复安全漏洞。 2. 哪些网站实用SiteLock?CMS网站、数据库驱动型网站、主机商&MSP、电商网站、集体站点/博客等都能够应用SiteLock。SiteLock为WordPress、Woo Commerce、Drupal、Microsoft IIS、Custom Sites等驰名网站提供平安爱护。 3. SiteLock 如何爱护网站平安?扫描并修补破绽应用SQL注入扫描,查看网站上的所有文件和应用程序;并进行恶意软件扫描、垃圾邮件扫描、XSS(跨站点脚本扫描)等多种形式检测网站是否存在病毒、破绽和其余网络威逼。如果发现浸透,您将立刻收到告诉,并且您的面板上将显示受感化页面列表。对受到攻打的数据库和CMS应用程序进行主动打补丁修复。Web防火墙WAF阻止利用“十大歹意网络威逼”的攻打;辨认后门文件并阻止攻击者拜访它们;辨别非法访问者和主动歹意访问者,禁止后者进入网站。主动革除恶意软件通过SiteLock由外向外扫描技术,检测恶意软件文件和注入的恶意软件,主动删除网站上和可见源代码中发现的恶意软件,以避免进一步损坏,并进行网站环境实时复原。主动网站备份和CDN服务SiteLock提供针对各规模网站的主动备份服务,网站所有者能够通过FTP或SFTP连贯安顿主动备份,而无需近程数据库连贯。同时,所有备份数据在传输过程中都通过加密,并存储在合乎SOC2和 HIPAA 的平安数据环境中,因而网站所有者能够确保他们的数据和业务是平安的。SiteLock领有超过40个寰球数据中心网络,无效升高网站提早,帮忙改善SEO排名。 4. 装置了SSL证书,还须要SiteLock吗?这是两种平安保障,抵挡不同的平安威逼。SSL证书爱护企业或者集体的数据和敏感信息,对客户端和服务端之间、浏览器与服务器之间的通信进行加密。而SiteLock是爱护网站数据库自身,避免黑客入侵或者攻打企业或者集体的网站文件和数据库。 5. SiteLock 比一般防护软件好吗?弱小的主动性和自动性。首先,它能全天24小时实时扫描、检测、辨认各种插件,破绽等,一旦发现有恶意软件、病毒或破绽威逼,SiteLock将及时向您发送警报,以便您疾速采取有效措施。其次,SiteLock可主动删除网站中的歹意内容,并反对主动打补丁,修复安全漏洞。但一般防护软件个别仅反对恶意软件扫描和应用程序扫描,并不反对SQL注入扫描,也不能自动检测、辨认、修复网站破绽。 6. SiteLock 信赖徽章是什么?SiteLock Trust Seal也能够叫SiteLock徽章,它是显示在网站的一个图像,能够向用户保障您的网站是平安且无恶意软件的。因为SiteLock每天执行所有扫描,因而Trust Seal也会每日随着更新以此表明网站已通过所有扫描。 留神:只有在网站扫描期间未发现任何问题时,才会显示SiteLock信赖徽章。如果扫描失败,网站访问者不会收到任何问题的警报。Trust Seal将持续显示所有扫描通过的最初日期;如果网站所有者无奈解决问题,SiteLock将在几天内从站点中删除Trust Seal。 另外,若您为网站实现了业务验证,确定企业实在存在,Trust Seal中也会显示企业电话及地址等详细信息。 7. 如何装置SiteLock?SiteLock是基于云的服务,无需任何装置,购买之后,代理商为您的网站配置SiteLock,它会应用根本扫描主动开始扫描您的网站。若您须要应用其它高级性能,能够进行一些其它的配置。一些常见配置如下:SMART——需在SiteLock面板中设置FTP详细信息;也能够通过“安全性摘要”局部中的“配置SMART”链接提交这些详细信息。CDN——须要增加CNAME记录。防火墙——需在域名中增加A记录。 8. 我能够将 SiteLock 用于多个网站和/或客户吗?不能够。您购买的每种 SiteLock 平安计划只会爱护一个网站。然而,您能够屡次购买该产品,以爱护您的多个网站。 9. 购买SiteLock后,能够退款吗?能够。国内SiteLock服务商锐成信息的多种SiteLock版本均反对30天无条件退款,如果购买SiteLock后,有任何疑难也能够随时征询在线客服寻求帮忙。

March 15, 2022 · 1 min · jiezi

关于网站安全:使用WGCLOUD监测网站状态并告警

咱们的网站在运行中,偶然会有一些问题呈现,比方不能拜访,机房停电了等,都会导致咱们的网站进行服务,用户无奈应用网站。 咱们迫切需要一款能实时监测网站状态,发现不能拜访时给咱们发送告诉(邮件短信微信钉钉)等 WGCLOUD监控零碎,就是这样一款工具,能够实时帮咱们监测网站的运行状态,如果发现返回状态码不是200,则会发送告警告诉 WGCLOUD下载和装置在下面那行点击即可,网站有比拟具体的装置应用阐明,咱们就不在本文中形容了,我在下方说一下网站监控的应用办法 装置好后,咱们登陆,在左侧点击菜单【服务接口】 而后点击【增加】,咱们先测试监控一个百度网站 好了,非常简单,至此就开始监测网站了,零碎默认每10分钟扫描一次网站,但咱们能够在server/config/application.yml中批改这个扫描时间 咱们监测网站,要保障server主机可能拜访到网站,因为网站监测是server被动来扫描的 还有一些状况,比方网站证书或配置的问题,程序不能拜访,这个时候能够监测网站的一个js、css、图片都能够,成果雷同 如果咱们有些服务接口,也能够用这个模块进行监测

October 12, 2021 · 1 min · jiezi

前端面试每日-31-第200天

今天的知识点 (2019.11.02) —— 第200天 (我也要出题)[html] 你知道p标签和br标签两者的区别是什么吗?[css] 如何用css自定义滚动条?能做到所有浏览器兼容吗?想要做兼容怎么办呢?[js] 页面的编码和被请求的资源编码不一致时如何处理?[软技能] 你要是在家时,公司网站出问题了你是怎么解决的?《论语》,曾子曰:“吾日三省吾身”(我每天多次反省自己)。 前端面试每日3+1题,以面试题来驱动学习,每天进步一点! 让努力成为一种习惯,让奋斗成为一种享受!相信 坚持 的力量!!!欢迎在 Issues 和朋友们一同讨论学习! 项目地址:前端面试每日3+1 【推荐】欢迎跟 jsliang 一起折腾前端,系统整理前端知识,目前正在折腾 LeetCode,打算打通算法与数据结构的任督二脉。GitHub 地址 微信公众号欢迎大家前来讨论,如果觉得对你的学习有一定的帮助,欢迎点个Star, 同时欢迎微信扫码关注 前端剑解 公众号,并加入 “前端学习每日3+1” 微信群相互交流(点击公众号的菜单:进群交流)。 学习不打烊,充电加油只为遇到更好的自己,365天无节假日,每天早上5点纯手工发布面试题(死磕自己,愉悦大家)。希望大家在这浮夸的前端圈里,保持冷静,坚持每天花20分钟来学习与思考。在这千变万化,类库层出不穷的前端,建议大家不要等到找工作时,才狂刷题,提倡每日学习!(不忘初心,html、css、javascript才是基石!)欢迎大家到Issues交流,鼓励PR,感谢Star,大家有啥好的建议可以加我微信一起交流讨论!希望大家每日去学习与思考,这才达到来这里的目的!!!(不要为了谁而来,要为自己而来!)交流讨论欢迎大家前来讨论,如果觉得对你的学习有一定的帮助,欢迎点个[Star] https://github.com/haizlin/fe...

November 2, 2019 · 1 min · jiezi

注入eval, Function等系统函数,截获动态代码

现在很多网站都上了各种前端反爬手段,无论手段如何,最重要的是要把包含反爬手段的前端javascript代码加密隐藏起来,然后在运行时实时解密动态执行。动态执行js代码无非两种方法,即eval和Function。那么,不管网站加密代码写的多牛,我们只要将这两个方法hook住,即可获取到解密后的可执行js代码。注意,有些网站会检测eval和Function这两个方法是否原生,因此需要一些小花招来忽悠过去。首先是eval的挂钩代码:(function() { if (window.__cr_eval) return window.__cr_eval = window.eval var myeval = function (src) { console.log("================ eval begin: length=" + src.length + “,caller=” + (myeval.caller && myeval.caller.name) + " ===============") console.log(src); console.log("================ eval end ================") return window.__cr_eval(src) } var _myeval = myeval.bind(null) _myeval.toString = window.__cr_eval.toString Object.defineProperty(window, ’eval’, { value: _myeval }) console.log(">>>>>>>>>>>>>> eval injected: " + document.location + " <<<<<<<<<<<<<<<<<<<")})();这段代码执行后,之后所有的eval操作都会在控制台打印输出将要执行的js源码。同理可以写出Function的挂钩代码:(function() { if (window.__cr_fun) return window.__cr_fun = window.Function var myfun = function () { var args = Array.prototype.slice.call(arguments, 0, -1).join(","), src = arguments[arguments.length - 1] console.log("================ Function begin: args=" + args + “, length=” + src.length + “,caller=” + (myfun.caller && myfun.caller.name) + " ===============") console.log(src); console.log("================ Function end ================") return window.__cr_fun.apply(this, arguments) } myfun.toString = function() { return window.__cr_fun + "" } Object.defineProperty(window, ‘Function’, { value: myfun }) console.log(">>>>>>>>>>>>>> Function injected: " + document.location + " <<<<<<<<<<<<<<<<<<<")})();注意和eval不同,Function是个变长参数的构造方法,需要处理this另外,有些网站还会用类似的机制加密页面内容,然后通过document.write输出动态解密的内容,因此同样可以挂钩document.write,挂钩方法类似eval,这里就不重复了。另外,还有个问题需要关注,就是挂钩代码的注入方法。最简单的就是F12调出控制台,直接执行上面的代码,但这样只能hook住之后的调用,如果希望从页面刚加载时就注入,那么可以用以下几种方式:油猴注入,油猴可以监听文档加载的几种不同状态,并在特定时刻执行js代码。我没有太多研究,具体请参见油猴手册代理注入,修改应答数据,在<head>标签内的第一个位置插入<script>节点,确保在其它js加载执行前注入;Fiddler, anyproxy等都可以编写外部规则,具体请参见代理工具的手册使用chrome-devtools-protocol, 通过Page.addScriptToEvaluateOnNewDocument注入外部js代码 ...

April 2, 2019 · 1 min · jiezi

某数加密的流程与原理简析

啃了这么长时间,基本上已经把某数的套路摸了个八九不离十,不愧是中国反爬界的集大成者,感觉收获满满,这里就简单记录一下分析成果。注意:某数在不同的网站上有不同的版本,其流程也略有不同,这里的流程不一定适用于其它网站。工具和资料之前的文章1 - 记录了之前尝试的其它方法之前的文章2 - 对加密混淆后的js的一些初步分析awesome-java-crawler - 我收集的爬虫相关工具和资料java-curl - 我编写的java HTTP库另一个用了某数加密的网站的破解SDK前端流程请求页面,返回应答;如果有之前生成的有效FSSBBIl1UgzbN7N80T cookie值,请求时须带上。应答的html中,包含以下关键数据:<meta id=“9DhefwqGPrzGxEp9hPaoag”>元素的content,这是加密后的数据,里面包含字符串映射表、全局方法映射表、加解密算法密钥等;注意有些网站的meta.id不同<script r=“m”>的元素,其中有一个是外部js链接,另一个则包含引导JS代码段,后面称为bootstrap.js。这段代码是动态生成的,每次请求均不相同。如果应答中包含FSSBBIl1UgzbN7N80T的cookie,保存起来,后面更新此cookie时会用到前面的外部js链接,其实内容是静态的,可以预先拿到并保存起来,里面的关键代码是:$ts.FxJzG50F = ‘……’;这个FxJzG50F的值就是加密后的核心JS代码段,后面称为main.js。这里比较奇妙的是:虽然加密后的内容是固定的,但是解密出来的JS里面的变量名、方法名、方法顺序却是随机的!执行bootstrap.js,包含以下关键步骤:把常用值、常用方法赋值给全局变量,以迷惑黑客,比如$wy = window; _$wG = undefined; _$a1 = String.prototype.charAt获取页面中的meta的content,分若干步骤解密之,这会在window中添加一堆全局变量和全局方法,包括所有的常量字符串映射获取window.$_ts.FxJzG50F的值,结合meta中的数据,生成核心JS代码即main.js执行main.js,这里的步骤就太多了,罗列一些关键的吧:继续从meta中解密一部分关键数据在以下事件上挂钩子,以记录用户行为:鼠标事件,触屏事件,键盘事件,输入事件,滚屏事件,加速器事件,屏幕方向改变事件,电池充电事件,窗口隐藏/显示事件另外,按键、点击、滚屏等事件的钩子函数同时也会更新FSSBBIl1UgzbN7N80T的cookie值在以下网络请求相关对象或方法上挂钩子,令其在发起请求时后面自动添加MmEwMD参数:ActiveXObject, XMLHttpRequest, Request, fetch, HTMLFormElement.submit关键方法检测,测试eval等几个方法是否被替换成非native版本添加一个频繁执行的定时器,其作用是检测debugger语句是否生效,如果生效说明有黑客在调试检查selenium, webdriver, PhantomJS, HeadlessChrome等自动化框架的特征检查浏览器类型,收集浏览器特征,收集渲染器特征执行WebGL 3D渲染测试,执行Canvas 2D渲染测试,目前看其测试结果并未实际使用,但不排除其它网站会使用此数据标识浏览器指纹添加一个50秒的定时器,其作用为更新FSSBBIl1UgzbN7N80T的cookie值对FSSBBIl1UgzbN7N80T cookie值进行首次更新FSSBBIl1UgzbN7N80T cookie值的内容这是整个某数加密的核心了,每次请求,无论GET, POST,是否XHR,都会带着这个cookie此cookie的值是很多数据加密后的内容,这里就不详细说了,至少是包含前面收集到的浏览器特征和用户行为数据的,简单的伪造User-Agent肯定是绕不过去的更新前会验证和重用之前的FSSBBIl1UgzbN7N80T值根据其内容可知,某数的后端是可以知道请求来源于何种浏览器,用户点击链接前有何行为等,这样他们可以做到:验证是否大量请求来源于相同特征的浏览器有选择的禁用某些浏览器给用户行为存疑的来源下毒MmEwMD参数的内容这个参数只会在XHR, 表单提交等场合用到,感觉和FSSBBIl1UgzbN7N80T的作用有重复,不确定某数的后端是否真的会严格验证其内容其内容的主体部分和FSSBBIl1UgzbN7N80T一致,另外会在前面连接上URL的摘要值

February 26, 2019 · 1 min · jiezi

在Chrome控制台注入npm模块

上次研究了如何在java内置javascript解释器nashorn中加载npm模块,这两天手头又有一个需求,要在Chrome浏览器的开发者控制台中加载同样的npm模块,以便在控制台中验证一些想法。因为对前端开发不算熟悉,不知道有没有其它的好方案,这个是我自己摸索的,但确实可用。流程npm下载browserifynpm i browserify -g写一个简单js文件,使用require加载npm模块,并注入到window对象window.acorn = require("./acorn")使用browserify打包这个js,该工具会自动把所有依赖的npm模块和简单js打包成单个js文件browserify entry.js > require_acorn.js把require_acorn.js文件的内容粘贴到开发者控制台并执行,然后就可以使用了代码压缩到这里其实桌面Chrome浏览器就没有问题了,我又用inspector连上安卓版Chrome试了一下,结果控制台崩了……估计是acorn太大了,毕竟有5000多行,于是又试了试压缩:npm下载uglify.jsnpm i uglify-js -g压缩前面生成的单个js包uglifyjs require_acorn.js > require_acorn.min.js这次果然没有问题了,在控制台执行typeof acorn可看到模块已经正确加载。

January 11, 2019 · 1 min · jiezi

某网站高度加密混淆的javascript的分析与破解思路

对某网站加密混淆后的javascript代码也算分析了一段时间了,虽然还没搞出来,但多少有些心得,这里记录一下。工具和资料前一篇文章 - 记录了之前尝试的一些方案awesome-java-crawler - 我收集的爬虫相关工具和资料java-curl - 本人写的java HTTP库,可用来替换chrome网络后端,更方便控制底层行为,如缓存、代理、监控、修改请求和应答等cdp4j - java版的Chrome Devtools Protocol实现,用于控制Chrome浏览器。最大的特点就是没有“特点”,你懂的……beautifier.io - js代码在线格式化estree - ECMAScript抽象语法树(AST)业界标准ECMAScript262语言规范 - 帮助理解estreeacornjs - ECMAScript编译器前端,将js源码解析成estree格式的ASTastring - ECMAScript代码生成器,将AST重新还原成js源码nashorn - java8以上自带的javascript解释器,性能接近原生nodejava中调用npm模块 - 我一直用的java和kotlin,为了调用js原生库,需用这个方案类似网站的破解 - 神箭手云的大佬写的很早的一篇分析文 - 看特征是这种加密的早期版本分析过程获取javascript代码加密的核心代码只有一小部分是直接写在网页的<script>里面的,有些代码是eval出来的可以用cdp4j监听Debugger.ScriptParsed事件,并在监听器中调用Debugger.getScriptSource来获取js代码文本这样是可以获取到所有前端javascript源码的,即使源码在网络应答中是加密的,但用eval执行前也必须还原为合法的js源码为了方便分析,可将代码保存为文件。该网站js会用定时器不断重复eval一段代码,因此可以用ScriptParsed.hash作为文件名,避免重复保存文件获取常量映射拿到js之后,格式化一下,发现还是一团乱麻,所有的变量,函数都是"$xx",可读性约等于0在Chrome控制台里试了一下,发现全局变量和函数都保存在window中了一部分无参调用的函数,其实返回的就是常量字符串还有一些$xx.call的,看了一下,其实就是系统方法,比如String.fromCharChode等因此可以编写一段代码,遍历window对象中所有形似_$xx的成员,这样既可将常量字符串映射、系统方法映射等搞出来可读性还原拿到映射关系之后是不是简单用正则表达式替换回去就万事大吉了呢?哪有那么简单!函数的局部变量、局部函数有很大可能性和全局变量重名,如果用正则无脑替换回去绝对会被坑死!!要是代码少倒也罢了,这里可有5000行代码,差之毫厘谬以千里!另外,不同函数的局部变量也存在大量重名,静态分析时干扰严重,因此,应该将局部变量也替换成唯一且更有意义的名字,比如<函数名><变量索引>因此,正确的方法是基于编译原理进行语法级别的替换,看到这里是不是要弃疗了?老子爬点数据还要写编译器?!还好,js上已经有很成熟的业界标准和若干老练的第三方库了,至少不用从龙书搞起……我这里选择了acornjs和astring,前者用于将js源码解析成抽象语法树AST,后者将AST还原成js源码。当然,在AST上我们是可以上下其手的……为了在java代码中运行acornjs和astring,请参见参考中《java中调用npm模块》一文。注意astring还依赖endswith和repeat两个polyfill,均可以npm下载到用acorn.parse()搞到AST之后,用递归的方式扫描每个节点进入每个FunctionDeclaration/FunctionExpression节点前,创建一个新的作用域对象放到栈顶,里面放该域内所有局部变量(含函数的参数)和新名称的映射表;退出时将栈顶弹出遇到Identifier节点,首先在作用域栈中自顶向下依次寻找当前变量名,找到了,则是本方法局部变量或闭包外局部变量,用新名字替换之;否则,则是全局变量,去映射表中查找注意,遇到CallExpression则要特殊处理,前面的AST变换只涉及修改标识符名,而为了将$xx()变换为"xxx",则涉及到结构变换,要把CallExpression节点修改为Literal节点并添加value属性全部处理完成后,就可以用astring.generate()产生还原后的代码了代码分析上面步骤完成后,这代码至少勉强能看了,别放松,后面还有无数的坑……还原前的代码只能是让人一脸懵逼,还原后的代码则足以让人咬牙切齿啊,多大仇啊,满满登登5000行全是正面硬钢的……我现在也就还卡在这一步,这里先记录一部分已经发现的反破解手法吧。不断主动中断干扰调试,并检测是否有动态分析行为var eI_v1 = window[“eval”]("(function() {var a = new Date(); debugger; return new Date() - a > 100;}())");_$n1 = _$n1 || eI_v1;//这个在上篇文章分析了,在这找到调用来源了。注意,在可读性还原之前这货长这样:var _$pW = $u9_$mz();$n1 = _$n1 || $pW;js代码动态混淆上一篇文章已经说过了,每次刷新js代码都会完全变化,包括全局/局部变量名、函数排列顺序等设断点会被干扰,而且代码无法重复执行对于调试意味着什么?检查关键函数是否被注入替换function __RW_checkNative(rh_p0, rh_p1) { // 函数名我手动改的 try { var rh_v2 = Function[“prototype”][“toString”]“apply”; var rh_v3 = new RegExp("{\s*\[native code\]\s*}"); if (typeof rh_p0 !== “function” || !rh_v3“test” || rh_p1 != undefined && rh_p0 !== rh_p1) _GL_undefined$sy = true; } catch ($r0) {}}会用这个函数检测eval, Function, setTimeout, setInterval几个系统函数是不是被注入了搞明白了,就可以用一些手段骗过去,不明白的话……检测当前窗口是否隐藏状态 document[“addEventListener”](“visibilitychange”, _$r0);会监控当前窗口是否在最上方,要是用cdp4j多开浏览器同时爬取……检测Selenium, WebDriver, PhantomJS var rm_v5 = “_Selenium_IDE_Recorder,selenium,callSelenium” , rm_v6 = “__driver_evaluate,__webdriver_evaluate,__selenium_evaluate,__fxdriver_evaluate,__driver_unwrapped,__webdriver_unwrapped,__selenium_unwrapped,__fxdriver_unwrapped,__webdriver_script_func,__webdriver_script_fn” , rm_v7 = [“selenium”, “webdriver”, “driver”]; if ($un(window, “callPhantom,_phantom”)) { … }看到这里想必就知道会发生些什么了……Hook住AJAX var ec_v4 = window[“XMLHttpRequest”]; if (ec_v4) {var ec_v5 = ec_v4[“prototype”];if (ec_v5) { __GL_f_open = ec_v5[“open”]; __GL_f_send = ec_v5[“send”]; ec_v5[“open”] = function () { _$t5(); arguments[1] = $pK(arguments[1]); return __GL_f_open[“apply”](this, arguments); };} else { … } }检查navigator是否是伪造的 var hi_v14 = window[“navigator”]; for (hi_v11 in hi_v14) {try { hi_v13 = hi_v14“hasOwnProperty”;} catch ($r0) { hi_v13 = false;} }如果你的navigator对象是自己注入的水货版本,那就露馅了……检查浏览器特征这块代码很复杂,还没分析完,现在能看出来的包括:navigator.languages - 据说在headless chrome中是没有这个字段的navigator.plugins - 据说无头和有头的chrome返回的插件列表不一样WebGL能力检查有一大段代码是在canvas上用webgl绘图,没搞过webgl,现在还不明白,但肯定也是检查浏览器特征手段之一破解思路其实并没有,还在抓瞎中……一些很不成熟的点子:可以拦截window对象的写入,把全局函数通过toString()搞到源码,再通过acorn/astring大法搞事情之后替换成eval版本但是函数名、变量名全部都混淆了,因此需要用一些特征来检测每个函数,目前想到的点子是将AST上所有节点分类计数连接成字符串,这样绝大多数方法的特征都是唯一的需要将浏览器特征检测代码在桌面浏览器、手机浏览器、桌面无头浏览器分别运行,看看到底有啥区别,然后注入代码修改特征进行欺骗 ...

December 27, 2018 · 1 min · jiezi