1.带你揭开神秘的码混 javascript AST 面纱之AST 基础与功能
2.顶级加密混淆混淆工具测评:ipagurd
3.tsx是什么晶体
4.代码混淆不再愁:一篇掌握核心技巧
5.代码安全之代码混淆及加固(Android)🔒
6.一键自动修改和翻新OC源码,解决苹果审核4.3和马甲问题
带你揭开神秘的码混 javascript AST 面纱之AST 基础与功能
在前端开发中,AST(抽象语法树)是码混一个关键概念,几乎所有框架都是码混基于AST进行改造和运行。理解AST的码混基础与功能对于开发者至关重要。以下内容将带你深入了解AST,码混梦幻卡修 源码并探讨其在代码编译、码混跨端运行及代码改造中的码混应用。
AST基础与功能
AST是码混前端开发中不可或缺的元素,几乎所有框架如React、码混Vue、码混Taro等,码混都依赖于AST进行代码优化和执行。码混多端应用的码混开发离不开对AST概念的掌握。
通过手写简单的码混编译器,我们可以将JavaScript代码编译为浏览器能够识别的格式。实现自定义编译器后,开发者能够设计新的框架,最终目标是将编译后的代码转换为浏览器可执行的JavaScript、CSS和HTML。
翻译过程是关键,将原始代码转换为浏览器能够执行的代码。这一过程不仅可以实现代码的跨平台运行,还能创建新的框架。个人开发者可以通过团队合作,解决各种问题,实现跨端框架的开发。
分析器
在深入讨论AST之前,我们需要了解分析器的概念,它是编译原理的核心。分析器负责解析代码,识别关键词、符号等元素。词法分析器(Lexical analyzer)通过扫描代码,将其转换为有意义的序列(Tokens),为后续语法分析做准备。
语法分析器(Syntactic analyzer)则负责解析这些Token,构建代码的结构,如语法分析树或抽象语法树(AST)。这一步骤对于理解代码逻辑至关重要。
以JavaScript为例,通过分析器处理后的代码转换为AST,使得机器能够理解并执行。
抽象语法树(AST)
AST是代码解析的核心结果,它将源代码结构化为树状表示形式。在语言领域,AST可以视为语法分析树,它直观地展示了代码的ssm属于什么源码结构和逻辑。
例如,分析“我写文章”这句话时,AST会将其分解为主语、谓语、宾语等元素,帮助理解和解析。
在JavaScript中,AST提供了代码原子化的表示,便于机器理解。通过AST,我们可以清晰地看到变量声明、函数定义等元素的结构,使代码解析过程更加直观。
AST的应用与用途
1. **自定义语法分析器**:开发者可以基于现有AST,设计自定义语法分析器,将特定语言转换为JavaScript,进而生成DOM节点、函数等。
2. **跨端运行**:利用AST实现代码翻译,支持在多种平台上运行。例如,Taro和uni-app等框架能将代码自动适配到H5、小程序等环境。
3. **代码改造与预编译**:通过分析AST,实现代码混淆、模块化、自动引入、版本兼容等增强处理,提高代码质量。
AST的应用实践
在框架改造与适配中,理解和使用AST至关重要。通过分析代码结构,开发者可以实现高效代码替换、配置读取与修改、文件重写等操作。掌握这些方法后,开发者能够更灵活地进行代码改造,提高开发效率与代码质量。
顶级加密混淆混淆工具测评:ipagurd
摘要
JavaScript混淆工具在代码安全保护中的重要性日益凸显,本文聚焦于专业商业级混淆工具ipagurd,从功能、便捷性、试用体验和混淆效果等方面进行全面评估,旨在为开发者提供选择最优混淆工具的参考。
产品形态
ipagurd作为一款基于网站平台的JavaScript混淆工具,为用户提供了在线操作的便捷性,无需额外下载安装,垃圾分类溯源码仅需通过IpaGuard官网或iOS应用商店即可获取。其网址为:IpaGuard官网--IOS应用/ipa文件混淆加密保护工具。
接口
无需访问iOS应用程序的源码,ipagurd能直接对ipa文件进行混淆加密,涵盖代码、库、资源文件等多个方面,实现全方位的保护。其操作流程简洁明了,用户只需注册账户并登录后台即可开始使用。
免费试用
为了满足用户的试用需求,ipagurd提供了为期7天的免费试用期,让开发者充分体验产品功能,以此评估其是否满足特定项目需求。
功能选项
ipagurd支持对iOS ipa文件的代码、库、资源等进行混淆保护,通过重命名和混淆处理关键代码,提升代码的不可读性,增加破解与反编译的难度。该工具支持多种开发语言和框架,包括OC、Swift、Flutter、React Native、H5等,适用范围广泛。
混淆效果
使用ipagurd混淆和保护代码后,可直接配置签名参数对ipa进行重签名,进行手机测试验证。测试结果显示,混淆保护能有效运作,不影响app的功能,满足预期要求。整个混淆和保护过程在本地电脑上完成,避免了代码泄露的风险,确保了操作的安全性和可靠性。
总结
综上所述,ipagurd以其出色的功能、便捷的操作流程、合理的免费试用机制以及显著的混淆效果,成为保护JavaScript代码安全的优质选择。本文旨在为开发者提供选择混淆工具的参考,确保项目开发过程中的代码安全性和稳定性。
tsx是什么晶体
TSX并非晶体。 TSX是一种扩展名,通常用于指代TypeScript文件的股市底部指标源码扩展名。TypeScript是一种由微软开发的开源编程语言,它是JavaScript的超集,添加了静态类型系统和一些高级功能以增强开发效率和可靠性。因此,TSX文件通常包含用TypeScript编写的代码,但本身并不是晶体。晶体通常指的是在自然界或实验室中形成的固体物质,具有明确的分子结构或原子排列。在计算机科学领域中,并没有TSX晶体的概念。 在计算机编程领域,TSX更多地与React框架相关,用于描述使用TypeScript编写的React组件文件。这些文件包含了用TypeScript编写的组件代码,同时保持了与JavaScript相似的语法和结构。虽然这些文件扩展名为.tsx,但它们并不代表某种晶体形态,而是表示特定编程语言的源代码文件。 总结来说,TSX不是一个晶体的名称或类别。它主要作为TypeScript文件的扩展名使用,用于指代用TypeScript编写的源代码文件,尤其是在React框架中编写的组件文件。在谈论计算机编程或软件开发时,应当明确区分术语,避免混淆不同领域的概念。代码混淆不再愁:一篇掌握核心技巧
代码混淆技术对于保护软件免受逆向工程具有关键作用。其原理是将原始代码转换为难以理解的形式,从而增加分析和篡改的难度。主要思路包括符号混淆、控制流混淆、计算混淆和虚拟机混淆。
首先,符号混淆涉及去除或混淆函数名、全局变量名等标识符,以降低代码可读性。例如,ELF文件可以通过命令行工具strip去除符号表实现这一目的。
控制流混淆旨在混淆程序的控制流程,使逻辑关系难以识别。常见的方法有控制流平坦化、虚假控制流和随机控制流。控制流平坦化通过删除跳转关系,使用集中分发块调度执行顺序。虚假控制流通过插入不可达基本块和虚假跳转,干扰攻击者分析。随机控制流通过克隆基本块和随机跳转混淆控制流。货运 源码资本投资
计算混淆通过混淆计算流程或数据,使分析者难以分辨具体计算过程。主要手段包括指令替代和常量替代。指令替代替换二元运算指令为复杂指令序列,常量替代则替换常数为复杂表达式,以混淆计算过程。
虚拟机混淆则将一组指令集合转化为自定义指令集,通过解释器执行,极大地增加了混淆难度,但可能带来性能损耗和易被误报等问题。
OLLVM是一款经典的代码混淆工具,支持控制流平坦化、虚假控制流和指令替代等混淆方法。Ipa Guard是另一款强大的混淆工具,无需iOS应用源码,直接对ipa文件进行混淆加密,保护代码、资源文件等,通过重命名和混淆关键代码降低可读性,提高破解和反编译难度。它同样支持对、资源、配置等进行修改,适用多种开发环境,包括OC、Swift、Flutter、React Native和H5类应用。
代码安全之代码混淆及加固(Android)🔒
在确保Android应用安全的过程中,代码混淆与加固扮演着重要角色。本文旨在阐述如何通过这两个技术手段,保护应用代码,防止未经授权的访问与修改。
代码混淆,旨在将原始代码加密,使其难以被反编译为可读的源代码。开发者通过使用ProGuard工具,实施混淆操作,生成加密后的应用。混淆文件的自定义则通过修改proguard-protect.txt来实现,进一步增强代码的安全性。
代码加固则侧重于应用层面的安全防护。其通过特定平台对应用进行加固,以增加破解与反编译的难度。以ipaguard为例,其功能强大,无需依赖源码,直接作用于ipa文件,对代码、代码库、资源文件等进行混淆与重命名处理,显著降低可读性,提升应用安全级别。、资源、配置等关键信息亦能通过修改名称与md5,实现混淆保护,兼容多种开发框架,如OC、Swift、Flutter、React Native、H5等。
综上所述,合理运用代码混淆与加固技术,能够有效提升Android应用的安全性,保护核心代码与知识产权。混淆操作通过加密代码,使其难以被反编译,而加固则通过特定平台的防护措施,进一步增强应用的安全防护能力。在实施代码混淆时,修改proguard-protect.txt文件以实现自定义混淆策略,而在代码加固层面,通过上传apk文件至加固平台,实现自动化处理,简化安全防护流程。通过这些技术手段的结合应用,开发者能够构建更加安全、可靠的Android应用。
一键自动修改和翻新OC源码,解决苹果审核4.3和马甲问题
自动修改/翻新/混淆/OC/iOS代码,自动替换类名,方法名
由来
网上有很多关于如何混淆iOS源码的方法,但是都不够智能,生成的方法类名要么千奇百怪,要么aaaabbbxxx这种完全毫无意义的名称,要么只能修改单个文件,多个文件根本无法关联,我就想有什么方法可以像真人一样去修改源码,符合语义,不是胡编烂造的方法名,还可以自动修改相关联的文件, 还能自己自定义单词库,于是就有了这个工具。
演示视频
划重点
1. 该工具可以让你一键翻新代码,但是不是生成完整的xcode项目,需要你自己新建一个xcode项目,然后把翻新的文件拖入到新的项目中。
2. 该工具只要是ipa都可以,不限制OC,Swift,Flutter,React Native,H5类app。
3.目前免费使用,免费使用,免费使用,重要的事情说三遍
几个效果展示
使用说明
下载项目,官网下载:IpaGuard官网--IOS 应用程序ipa文件混淆加密保护工具注意:说明中提到的路径均为绝对路径,提到的逗号,都为英文逗号。使用工具运行成功后,需要自己新建OC项目再将修改后的代码与资源文件拖入新建的工程。功能说明:
未来可能添加的功能:说明文档会不定期更新,如遇到问题先检查是否依照说明文档的定义进行配置。
1. 源文件路径/import_path(必选)
OC项目文件路径包含代码文件与资源文件
如下图
2. 导出路径/export_path(必选)
OC项目导出路径。
注意,本工具并不能帮你生成完整的OC项目,只会生成OC代码文件和复制修改项目内部的资源
3. 直接复制的路径/copy_only_pathes(可选)
直接复制,忽略的文件名,多个路径以,逗号隔开
4. 直接复制的文件名(不包含后缀)/copy_only_names(可选)
直接复制,忽略的文件名,不包含后缀
例:UISheetView.h 只需要输入UISheetView,多个文件用, 逗号隔开(注意全半角,逗号为英文逗号)
5. 不进行修改的文件或文件夹/no_change_pathes(可选)
深度读取,但是不会进行更改,如果引入了其他修改了的类,会相应的修改深度读取(说明):会读取文件内部的类比与项目内其他类进行关联例:xxxx/Classes/Models 不想修改,则输入这个文件夹的绝对路径, 如只输入Models,则所有包含名为Models的文件或文件夹都会标记为只读取不修改,多个文件和类用, 逗号隔开(注意全半角,逗号为英文逗号)
6. 不修改的文件或类的前缀名(区分大小写)/no_change_class_prefix_names(可选)
例:不想所有以MJ开头的类或文件,则输入MJ, 多个文件和类用,逗号隔开(注意全半角,逗号为英文逗号)
7. 不修改的文件后缀名(区分大小写)/no_change_class_prefix_names(可选)
如第六条。Model,Info -->不修改以Model,Info为结尾的文件或类
8. 只修改类名的文件名或类名/only_change_clsname_names(可选)
深度读取,只修改类名,不修改内部属性与方法,这个优先级最低,如果之前的条件包含了本参数中的路径,则不生效
9. 只修改类名的文件夹/文件路径/only_change_clsname_pathes(可选)
深度读取,只修改类名,不修改内部属性与方法的文件名,这个优先级最低,如果之前的条件包含了本参数中的路径 则不生效
. 动词词库路径/verbwords_path(可选)
提供单词数组json文件路径 修改的命名逻辑为ABAB型,A为动词,B为名词,例:getMessage
. 名词词库路径/nounwords_path(可选)
提供单词数组json文件路径 修改的命名逻辑为ABAB型,A为动词,B为名词,例:getMessage
. 类名前缀/class_prefix(可选)
给每个类添加的前缀例:MJExtension-> MJ 为前缀, SD_ScrollView-> SD_ 为前缀
. 属性名前缀/property_prefix(可选)
给每个属性添加的前缀例:property(nonatomic, strong) UIViewMJView-> MJ 为前缀, property(nonatomic, strong) UIView SD_View-> SD_ 为前缀
. 需要过滤的方法路径/filter_methods_path(可选)
把你需要过滤的方法写入一个文本文件,然后将该文本路径填入到此项输入框注意事项:其他说明:本工具已经过滤了大多数常用系统方法,大部分情况下不需要配置此项。
. 类名和属性名后缀路径/property_subfix_path(可选)
给每个属性添加的后缀,需要一个配置json文件路径json格式:注意:key一定要与上面一直,否则系统无法读取,工具会遍历数组,为对应的类匹配后缀,在配置改文件时,包含相同字符串的类,需要将类名更长的类放在前面,不然匹配结果会达不到预期。例如:UITableView与UIView,配置时需要将UITableView放在View之前,如上面的例子。
. 为方法名添加介词/add_preposition(可选)
工具内置了所有介词,可选择性添加例:getMessage添加介词后-> getAMessage or getTheMessage具体介词完全随机添加
. 修改分类/change_category(可选)
工具会自动识别分类,可选择是否修改
. 将原代码行作为注释写入/add_original_comments(可选)
由于本工具不保证修改后百分百不报错,将修改过原属性声明和方法名作为注释写入,方便在重建工程后报错与原工程进行对照,建议设置
. 修改方法内部局部变量名/change_local_property(可选)
定义在方法内部的局部变量,可选择是否修改
. 综合配置路径(可选)
json配置文件路径,内部必须为字典,key为说明条目标题后面的英文请注意:配置文件优先级高于输入框输入的规则,配置文件存在时, 输入框输入的配置不生效例:(可直接复制修改)
关于bug
虽然工具本身经过了完整的商业项目的考验,但由于每个人的代码风格不一样,工具不可避免会出现解析不了的情况,开发者建议过滤C语言的文件,与第三方库,减少出错的可能性,还是无法运行成功,你可以发isssue至客服邮箱或根据报错Log自行删减项目文件,其中利弊,自行斟酌。
iOS移动应用安全加固:保护您的App免受恶意攻击的重要步骤
本文着重探讨iOS移动应用的安全加固,以确保您的App免受恶意攻击。首先,让我们理解APP加固的核心概念,它涉及对apk或ipa文件进行加密处理,以防止源码和资源文件被盗用。市场上的加固服务商如梆梆加固、加固、爱加密和ipaguard都有各自的解决方案。
对于iOS应用,ipaguard提供了一种独特的保护方式,它无需源码,直接对ipa文件进行混淆加密,包括代码混淆、重命名关键代码和修改MD5等,大大增加了破解和反编译的难度。无论您的应用是OC、Swift、Flutter、React Native还是H5,ipaguard都能提升其安全性。
保护iOS应用的安全是至关重要的,它涉及应用的代码混淆和资源文件加密,目的是提高代码的不可读性,防止恶意攻击者轻易获取。通过实施适当的加固措施,开发者能够确保用户数据安全,维护应用的知识产权,为用户提供一个更为安全的使用环境。
总结来说,移动应用安全加固是开发者不能忽视的环节。了解并选择合适的加固策略,对于确保应用免受威胁,提供用户信任的移动体验至关重要。
本文旨在帮助开发者们更好地理解iOS移动应用安全加固,希望对您的工作有所帮助。
Djangoå端ç¨ä»ä¹è¯è¨ï¼pythondjangoå端ï¼
æ¬ç¯æç« é¦å¸CTOç¬è®°æ¥ç»å¤§å®¶ä»ç»æå ³Djangoå端ç¨ä»ä¹è¯è¨ä»¥åpythondjangoå端çç¸å ³å 容ï¼å¸æ对大家ææ帮å©ï¼ä¸èµ·æ¥ççå§ãæ¬æç®å½ä¸è§ï¼1ãå端å¼åéè¦å¦ä»ä¹2ãpythonè¯è¨djangoæ¡æ¶ååå°ï¼å端ç¨VueReactlayuiangularï¼åªä¸ä¸ªæ¯ç«å¥½ï¼3ãdjangoæ¯å端è¿æ¯å端4ãå端å¼åéè¦å¦ä¹ ä»ä¹è¯è¨æ¯è¾å¥½åï¼5ãå端ç¼ç¨è¯è¨æå ç§ï¼6ãdjangoéæ©ä»ä¹æ¡æ¶åå端UIæ¯è¾å¥½å端å¼åéè¦å¦ä»ä¹å°±è¯´æ们ç®åä¸å½ææè¡ä¸ï¼å¯ä»¥è¯´ä»»ä½ä¸ä¸ªè¡ä¸é½ç¦»ä¸å¼äºèç½ï¼ç°å¨ç人们对äºäºèç½çä¾èµå¾å¤§ï¼äºèç½è¡ä¸å¨ä¸å½æ çæ¯ç°å¨åå±åæ¯æ好ç没æä¹ä¸ã
å端主è¦è¦å¦çå 容主è¦æï¼
â 计ç®æºåºç¡ä»¥åPSåºç¡
â¡å端å¼ååºç¡ï¼HTML5å¼åãJavaScriptåºç¡å°é«çº§ãjQueryç½é¡µç¹æãBootstrapæ¡æ¶ï¼
â¢ç§»å¨å¼å
â£å端é«çº§å¼åï¼ECMAScript6ãVeu.jsæ¡æ¶å¼åãwebpackãå端页é¢ä¼åãReactæ¡æ¶å¼åãAngularJS2.0æ¡æ¶å¼åçï¼
â¤å°ç¨åºå¼å
â¥å ¨æ å¼åï¼MySQLæ°æ®åºãPythonç¼ç¨è¯è¨ãDjangoæ¡æ¶çï¼
â¦å°±ä¸æå±ï¼ç½ç«SEOä¸å端å®å ¨ææ¯ï¼
äºèç½è¡ä¸ç®åè¿æ¯æçé¨çè¡ä¸ä¹ä¸ï¼å¦ä¹ ITæè½ä¹å足å¤ä¼ç§æ¯ææºä¼è¿å ¥è ¾è®¯ãé¿éãç½æçäºèç½å¤§åé«èªå°±ä¸çï¼åå±åæ¯é常好ï¼æ®é人ä¹å¯ä»¥å¦ä¹ ã
æ³è¦ç³»ç»å¦ä¹ ï¼ä½ å¯ä»¥èå¯å¯¹æ¯ä¸ä¸å¼è®¾æç¸å ³ä¸ä¸ççé¨å¦æ ¡ï¼å¥½çå¦æ ¡æ¥ææ ¹æ®å½ä¸ä¼ä¸éæ±èªä¸»ç å课ç¨çè½åï¼å»ºè®®å®å°èå¯å¯¹æ¯ä¸ä¸ã
ç¥ä½ å¦æææï¼æé纳
å大éé¸å¦ç课å å®å½
pythonè¯è¨djangoæ¡æ¶ååå°ï¼å端ç¨VueReactlayuiangularï¼åªä¸ä¸ªæ¯ç«å¥½ï¼å项ç®è¦æ±æççè¯ï¼æ¨è2个ç°æçã
æä¾2个ç°æç
drupal
orchardcore
djangoæ¯å端è¿æ¯å端æ¼ç¤ºæºåï¼å为MateBookXç³»ç»çæ¬ï¼winAPPçæ¬ï¼django3.0djangoæ¯ç¨å¨å端ãDjangoæ¯ä¸ä¸ªåºäºPythonçWebåºç¨æ¡æ¶ãå®ä¸Pythonçå¦å¤ä¸ä¸ªWebæ¡æ¶Flaskæ大çåºå«æ¯ï¼å®å¥è¡âå å«ä¸åâçå²å¦ã该ç念å³ä¸ºå建Webåºç¨æéçéç¨åè½é½åºè¯¥å å«å°æ¡æ¶ä¸ï¼èä¸åºåå¨äºç¬ç«ç软件å ä¸ãä¾å¦èº«ä»½éªè¯ãURLè·¯ç±ã模æ¿ç³»ç»ãå¯¹è±¡å ³ç³»æ å°ï¼ORMï¼åæ°æ®åºè¿ç§»çåè½é½å·²å å«å¨Djangoæ¡æ¶ä¸ãè½ç¶çä¸å»å¤±å»äºä¸äºå¼¹æ§ï¼ä½æ¯å´å¯ä»¥å¨æ建ç½ç«çæ¶åæ´å ææçã
å端å¼åéè¦å¦ä¹ ä»ä¹è¯è¨æ¯è¾å¥½åï¼ç½ç«å¼åå¼å大è´å为å端ï¼å®¢æ·ç«¯ï¼åå端ï¼æå¡å¨ç«¯ï¼ï¼å端主è¦è´è´£å®ç°è§è§å交äºææï¼ä»¥åä¸æå¡å¨éä¿¡ï¼å®æä¸å¡é»è¾ãå®çæ ¸å¿ä»·å¼å¨äºå®ç°ç¨æ·ä½éªï¼å¤§åäºèç½å ¬å¸çç¨æ·ä½éªé¨é¨ï¼ä¸è¬ä¼å æ¬ç¨æ·ç 究ã交äºè®¾è®¡ãå端ææ¯åè§è§è®¾è®¡çæ¹é¢çå 容ãå¦æä½ æ³æ为ä¸ä¸ªä¼ç§çwebå端å¼åå·¥ç¨å¸ï¼å¯ä»¥æ¥è¿ä¸ªè£ï¼åé¢ä¸ä¸ªæ°æ¯4ä¹4ï¼ä¸é´æ¯é¶å 4ï¼æåçä¸ä¸ªæ¯9å4ï¼ä¸ä¸ªæ°è¿èµ·æ¥å°±æ¯äºï¼å¦æä¸æ³å¦ä¹ çå°±ä¸è¦å äºã
webå端å¼åéè¦ææ¡çææ¯ï¼
1.å¦ä¹ html,è¿ä¸ªæ¯æç®åç,ä¹æ¯æåºç¡ç.è¦çç»ææ¡divãformtableãulliãpãspanãfontè¿äºæ ç¾,è¿äºé½æ¯æ常ç¨ç,ç¹å«æ¯divåtable,divç¨äºå¸å±ãtableä¹å¯ä»¥ç¨äºå¸å±,ä½æ¯ä¸çµæ´»,åºæ¬tableæ¯ç¨æ¥åæ°æ®æ交é.
2.å¦ä¹ css,è¿é说çcssä¸å æ¬css3,ä¸è¬æ们çå°webå端å¼åå·¥ç¨å¸çè¦æ±éé¢,æä¸ä¸ªä¼ä½¿ç¨css+htmlæè css+divæ¥è¿è¡çé¢å¸å±,æ以cssæ¯ç¨äºè¾ å©htmlæ¥å¸å±åå±ç¤ºç,æ们称ä¹ä¸ºâcssæ ·å¼â,为ä»ä¹ä¼è¯´css+divå¢?å 为æä¸é¢è¯´äºdivå°±æ¯html主è¦ç¨äºå¸å±çä¸è¥¿,æ以divå°±æ¯æ ¸å¿ææ¡çä¸è¥¿!é£ä¹cssè¯å®å¿ é¡»è¦é ådivæ¥ä½¿ç¨æ好.cssè¦çç»ææ¡floatãpositionãwidthãheightï¼ä»¥å对äºçæ大æå°ãä¼ä½¿ç¨ç¾åç¾ãoverflowãmarginãpaddingçç,è¿äºé½æ¯è·å¸å±æå ³ç³»çæ ·å¼,ä¸ç¹è¦ææ¡.
3.å¦ä¹ js.å¯è½å两个大家è§å¾è¿è¿çå»,çå°jså°±èç¼äº,å ¶å®å§,jså ¥é¨å¾ç®åç,ä¸éè¦ä¼å¾å¤ä¸è¥¿ç,åªè¦ä¼æ ¹æ®æ个idãæè nameæ¿å°ç½é¡µdomæè æ ·å¼ãæè å¼,ç¶åä¼ç»æ个idæè nameçå ç´ æ ç¾èµå¼ãæè 追å æ°æ®ã追html,è¿ä¸ªæ¯è·æ°æ®æå ³ç³»çæä½,ç¶åæ°æ®é»è¾å¤æ,æææ¹é¢ç,æ éå°±æ¯è·³è½¬ãå¼¹æ¡ãéèä»ä¹ç,æè¿äºå ¨é¨ç»åå ¶ä»å°±æ¯å®é ç¨éäº,代ç ä¸ç¹é½ä¸é¾,ä¼äºè¿äºåºç¡js,å ¶ä»çç´æ¥ç¾åº¦å°±å¥½äº.ç¶åçå¤äº,ç¨å¤äº,å°±ä»ä¹é½ä¸æ¯é®é¢äº.
4.å¦ä¹ jquery.jqueryæ¯ç¸å½äºæjså°è£ äºä¸å¥çä¸ä¸ªjsæ件,ç®çå°±æ¯æä½èµ·æ¥æ´æ¹ä¾¿,代ç åçæ´å°,jqueryå ¥é¨ä¹å¾ç®å,é£äºæ¯å ¥é¨éè¦å¦çåjsä¸æ ·,åªæ¯æ¢æäºjqç代ç .å ¶ä»çä¸æ ·ç¾åº¦å°±å¤äº.
5.æ好ä¼ç¹åå°è¯è¨,æ¯å¦javaãphp,为ä»ä¹å¢?å 为æ们åå°çé¢çæ°æ®é½æ¯ä»åå°æ¥ç,å¦æä¼ç¹åå°ä»£ç ,å°±ç¥éæä¹è·åå°äº¤äºæ°æ®æ¯æ好ç,è¿æ ·è约æ¶é´,ä¹å¯ä»¥è®©å端代ç æ´è§è.ä¸ç¶å¯è½å ä¸ºä½ çåæ³åå端ç»æ¥çæ°æ®ä¸è½ç»åä¸,é£ä¹å端代ç åå¾éæ°å,é£å°±æ´èç¼äº.
6.å¦ä¹ css3+html5,为ä»ä¹è¿ä¸ªæ¾æåå¢?åå,å 为æèªå·±ä¹ä¸å¤ªä¼,æ¯ç«æ¯ä¸æä¸æ»å,è½ç¶è¿ä¸ªå¾æµè¡,ä½æ¯ææ¯æå端ç,å¨å·¥ä½ä¸ç¨ä¸å°å®,åªæå¨èªå·±ç½ç«éè¦æ¹æ ·å¼,æè æåç½ç«æ ·å¼åºé®é¢çæ¶å,ææä¼å»ä¸´æ¶å»ç 究ä¸.ä½æ¯å¦æä½ ä»¬æ¯åå¤ä¸é¨æå端,é£ä¹æ好è¿æ¯å¦ä¸ä¸ç.
webå端å¼åéè¦ææ¡çææ¯ï¼
1.å¦ä¹ html,è¿ä¸ªæ¯æç®åç,ä¹æ¯æåºç¡ç.è¦çç»ææ¡divãformtableãulliãpãspanãfontè¿äºæ ç¾,è¿äºé½æ¯æ常ç¨ç,ç¹å«æ¯divåtable,divç¨äºå¸å±ãtableä¹å¯ä»¥ç¨äºå¸å±,ä½æ¯ä¸çµæ´»,åºæ¬tableæ¯ç¨æ¥åæ°æ®æ交é.
2.å¦ä¹ css,è¿é说çcssä¸å æ¬css3,ä¸è¬æ们çå°webå端å¼åå·¥ç¨å¸çè¦æ±éé¢,æä¸ä¸ªä¼ä½¿ç¨css+htmlæè css+divæ¥è¿è¡çé¢å¸å±,æ以cssæ¯ç¨äºè¾ å©htmlæ¥å¸å±åå±ç¤ºç,æ们称ä¹ä¸ºâcssæ ·å¼â,为ä»ä¹ä¼è¯´css+divå¢?å 为æä¸é¢è¯´äºdivå°±æ¯html主è¦ç¨äºå¸å±çä¸è¥¿,æ以divå°±æ¯æ ¸å¿ææ¡çä¸è¥¿!é£ä¹cssè¯å®å¿ é¡»è¦é ådivæ¥ä½¿ç¨æ好.cssè¦çç»ææ¡floatãpositionãwidthãheightï¼ä»¥å对äºçæ大æå°ãä¼ä½¿ç¨ç¾åç¾ãoverflowãmarginãpaddingçç,è¿äºé½æ¯è·å¸å±æå ³ç³»çæ ·å¼,ä¸ç¹è¦ææ¡.
3.å¦ä¹ js.å¯è½å两个大家è§å¾è¿è¿çå»,çå°jså°±èç¼äº,å ¶å®å§,jså ¥é¨å¾ç®åç,ä¸éè¦ä¼å¾å¤ä¸è¥¿ç,åªè¦ä¼æ ¹æ®æ个idãæè nameæ¿å°ç½é¡µdomæè æ ·å¼ãæè å¼,ç¶åä¼ç»æ个idæè nameçå ç´ æ ç¾èµå¼ãæè 追å æ°æ®ã追html,è¿ä¸ªæ¯è·æ°æ®æå ³ç³»çæä½,ç¶åæ°æ®é»è¾å¤æ,æææ¹é¢ç,æ éå°±æ¯è·³è½¬ãå¼¹æ¡ãéèä»ä¹ç,æè¿äºå ¨é¨ç»åå ¶ä»å°±æ¯å®é ç¨éäº,代ç ä¸ç¹é½ä¸é¾,ä¼äºè¿äºåºç¡js,å ¶ä»çç´æ¥ç¾åº¦å°±å¥½äº.ç¶åçå¤äº,ç¨å¤äº,å°±ä»ä¹é½ä¸æ¯é®é¢äº.
4.å¦ä¹ jquery.jqueryæ¯ç¸å½äºæjså°è£ äºä¸å¥çä¸ä¸ªjsæ件,ç®çå°±æ¯æä½èµ·æ¥æ´æ¹ä¾¿,代ç åçæ´å°,jqueryå ¥é¨ä¹å¾ç®å,é£äºæ¯å ¥é¨éè¦å¦çåjsä¸æ ·,åªæ¯æ¢æäºjqç代ç .å ¶ä»çä¸æ ·ç¾åº¦å°±å¤äº.
5.æ好ä¼ç¹åå°è¯è¨,æ¯å¦javaãphp,为ä»ä¹å¢?å 为æ们åå°çé¢çæ°æ®é½æ¯ä»åå°æ¥ç,å¦æä¼ç¹åå°ä»£ç ,å°±ç¥éæä¹è·åå°äº¤äºæ°æ®æ¯æ好ç,è¿æ ·è约æ¶é´,ä¹å¯ä»¥è®©å端代ç æ´è§è.ä¸ç¶å¯è½å ä¸ºä½ çåæ³åå端ç»æ¥çæ°æ®ä¸è½ç»åä¸,é£ä¹å端代ç åå¾éæ°å,é£å°±æ´èç¼äº.
6.å¦ä¹ css3+html5,为ä»ä¹è¿ä¸ªæ¾æåå¢?åå,å 为æèªå·±ä¹ä¸å¤ªä¼,æ¯ç«æ¯ä¸æä¸æ»å,è½ç¶è¿ä¸ªå¾æµè¡,ä½æ¯ææ¯æå端ç,å¨å·¥ä½ä¸ç¨ä¸å°å®,åªæå¨èªå·±ç½ç«éè¦æ¹æ ·å¼,æè æåç½ç«æ ·å¼åºé®é¢çæ¶å,ææä¼å»ä¸´æ¶å»ç 究ä¸.ä½æ¯å¦æä½ ä»¬æ¯åå¤ä¸é¨æå端,é£ä¹æ好è¿æ¯å¦ä¸ä¸ç.
å端ç¼ç¨è¯è¨æå ç§ï¼
1ãhtml:è´è´£å®ä¹é¡µé¢çå 容
2ãcss:è´è´£å®ä¹é¡µé¢çæ ·å¼
3ãjavascript:è´è´£æ§å¶é¡µé¢çè¡ä¸º
以ä¸ä¸ç§ä¸ºå端å¦ä¹ çåºæ¬è¯¾ç¨
1ãjquery:javascriptæ¡æ¶ï¼javascriptå½æ°åºï¼æ大ç®åäºjavascriptã
2ãbootstrap:ä¸ä¸ªç¨äºå¿«éå¼åWebåºç¨ç¨åºåç½ç«çå端æ¡æ¶ã
3ãAngularJS:æ¯ä¸ä¸ª?JavaScriptæ¡æ¶ã
4ãJSON:æ¯åå¨å交æ¢ææ¬ä¿¡æ¯çè¯æ³.
5ãAjax:å¯ä»¥ç¨äºå建快éå¨æçç½é¡µãAJAXæ¯ä¸ç§å¨æ ééæ°å è½½æ´ä¸ªç½é¡µçæ åµä¸ï¼è½å¤æ´æ°é¨åç½é¡µçææ¯ã
6ãAngular2:æ¯ä¸ä¸ªå¼æºçJavaScriptæ¡æ¶
7ãReact:æ¯ä¸ä¸ªç¨äºæ建ç¨æ·çé¢çJAVASCRIPTåºãReact主è¦ç¨äºæ建UI.
8ãLESS:æ¯ä¸ä¸ªCSSé¢å¤çå¨ï¼å¯ä»¥ä¸ºç½ç«å¯ç¨å¯èªå®ä¹ï¼å¯ç®¡çåå¯éç¨çæ ·å¼è¡¨ãæ¯ä¸ç§å¨ææ ·å¼è¡¨è¯è¨ï¼æ©å±äºCSSçåè½
9ãVue.jsï¼æ¯ç¨äºæ建交äºå¼çWebçé¢çåºã
ãNode.jsï¼æ¯è¿è¡å¨æå¡ç«¯çJavaScriptã
以ä¸åç§ï¼æ¯å¨å®é å·¥ä½åºç¨ä¸å¸¸ç¨çï¼æ»ç»çè¿äºå¸æå¯¹ä½ ææ帮å©ã
å¦ä¹ å端å¼åï¼æ¨èå°å京å°å¦å ï¼éåçå¸èµåéåç§å¦çæ课æ¹å¼ï¼ä¼å¸¦ç»ä½ æå®ç¾çå¦ä¹ ä½éªã
djangoéæ©ä»ä¹æ¡æ¶åå端UIæ¯è¾å¥½1ãflex
Apacheåºéä¼ä»å¤©åå¸äºFlex4.8çæ¬ï¼è¿æ¯Adobeå°Flexæç®ç»Apacheåºéä¼ååå¸ç第ä¸ä¸ªçæ¬ã
éè¦æ³¨æçæ¯ï¼Flexç®åè¿å¨åµåé¶æ®µï¼è¿ä¸æ¯Apacheçæ£å¼é¡¹ç®ï¼Flex4.8ä¹ä¸æ¯ä¸ä¸ªæ£å¼çApacheçæ¬ã
Apache称ï¼è¯¥çæ¬æ å¿çFlexæ°æ¶ä»£çå¼å§ï¼Flexçæªæ¥å°ç±ç¤¾åºæ¥é©±å¨ï¼èä¸æ¯ç±ä¸ä¸ªå ¬å¸é©±å¨ãå¼åè å¯ä»¥éè¿è´¡ç®ä»£ç ï¼æ¥å¸®å©æ¹è¿Flexï¼å¦ä¿®å¤bugãå¢å åè½çã
ä»Macromediaåç»Adobeï¼ç¶ååæç»apacheï¼ä¸ç¥éæä»ä¹åå ãä¸è¿è¿å¥½æ²¡æç»è¿å¤§å¹ éæï¼å¦åå°±ççæ¯æ²åäºï¼
2ãextjs
ExtJSæ¯ä¸ç§ä¸»è¦ç¨äºå建å端ç¨æ·çé¢ï¼æ¯ä¸ä¸ªåºæ¬ä¸åå°ææ¯æ å ³çå端ajaxæ¡æ¶ã
åè½ä¸°å¯ï¼æ 人è½åºå ¶å³ã
æ 论æ¯çé¢ä¹ç¾ï¼è¿æ¯åè½ä¹å¼ºï¼extçè¡¨æ ¼æ§ä»¶é½é«å± æ¦é¦ã
å丽ççé¢ï¼çµæ´»çåè½ï¼è¿æå¼åå·¥å ·é½æ¯é å¥çï¼ä½æ个æ大çé®é¢ï¼ç¨å°±å¾è±é±ï¼
3ãeasyui
easyui帮å©ä½ æå»ºä½ çwebåºç¨æ´å 容æã
å®æ¯ä¸ä¸ªåºäºjqueryçæ件ï¼å¼ååºæ¥çä¸å¥è½»é级çuiæ¡æ¶ï¼é常å°å·§èä¸åè½ä¸°å¯ã
å®æ¹ç½ç«æ¯ï¼
ä½æ¯å¥¹æä¸ä¸ªæ大çé®é¢å°±æ¯ä»£ç åªè½æ¾å°ä»¥åçå¼æºççæ¬ï¼å°äº1.2以åççæ¬æºä»£ç é½æ¯ç»è¿æ··æ·çï¼å¦æéå°é®é¢ä¿®æ¹èµ·æ¥ä¼é常麻ç¦ï¼ä¸è¿ä¸ä¸ªæ¯è¾å¤§çä¼å¿æ¯å¼æºå è´¹ï¼å¹¶ä¸çé¢åçè¿è¯´çè¿å»ï¼
4ãMiniUI
åä¸ä¸ªåºäºjqueryçæ¡æ¶ï¼å¼åççé¢åè½é½å¾ä¸°å¯ã
jQueryMiniUI-å¿«éå¼åWebUIã
å®è½ç¼©çå¼åæ¶é´ï¼åå°ä»£ç éï¼ä½¿å¼åè æ´ä¸æ³¨äºä¸å¡åæå¡ç«¯ï¼è½»æ¾å®ç°çé¢å¼åï¼å¸¦æ¥ç»ä½³çç¨æ·ä½éªã
使ç¨MiniUIï¼å¼åè å¯ä»¥å¿«éå建Ajaxæ å·æ°ãB/Så¿«éå½å ¥æ°æ®ãCRUDãMaster-Detailãèåå·¥å ·æ ãå¼¹åºé¢æ¿ãå¸å±å¯¼èªãæ°æ®éªè¯ãåé¡µè¡¨æ ¼ãæ ãæ å½¢è¡¨æ ¼çå ¸åWEBåºç¨ç³»ç»çé¢ã
çé¢åçæºä¸éï¼åè½ä¹æºä¸°å¯ï¼ä½æ¯æ两个æ¯è¾å¤§çé®é¢ï¼ä¸ä¸ªæ¯æ¶è´¹ï¼ä¸ä¸ªæ¯æ²¡ææºç ï¼è¯´ç½äºï¼ä¸å¼æºï¼åºäºè¿ä¸ªå¼åå¦ææ³å¯¹åè½åæ©å±å°±éè¦æ¾ä»ä»¬çå¢éè¿è¡å级ï¼
5ãjQueryUI
jQueryUIæ¯ä¸å¥jQueryç页é¢UIæ件ï¼å å«å¾å¤ç§å¸¸ç¨ç页é¢ç©ºé´ï¼ä¾å¦Tabsï¼å¦æ¬ç«é¦é¡µå³ä¸è§é¨åï¼ãæå¸ææï¼æ¬ç«é¦é¡µå·¦ä¸è§ï¼ã对è¯æ¡ãææ¾ææãæ¥æéæ©ãé¢è²éæ©ãæ°æ®æåºãçªä½å¤§å°è°æ´ççé常å¤çå 容ã
åè½éå¸¸å ¨é¢ï¼çé¢ä¹æºæ¼äº®çï¼å¯ä»¥æ´ä½ä½¿ç¨ï¼ä¹å¯ä»¥åå¼ä½¿ç¨å ¶ä¸çå 个模åï¼å è´¹å¼æºï¼
6ãDWZ
DWZå¯å®¢æ·ç«¯æ¡æ¶(jQueryRIAframework),æ¯ä¸å½äººèªå·±å¼åçåºäºjQueryå®ç°çAjaxRIAå¼æºæ¡æ¶.
设计ç®æ æ¯ç®åå®ç¨,å¿«éå¼å,éä½ajaxå¼åææ¬ã
欢è¿å¤§å®¶æåºå»ºè®®ï¼æ们å°å¨ä¸ä¸çæ¬ä¸è¿ä¸æ¥è°æ´åå®ååè½ï¼å ±åæ¨è¿å½å æ´ä½ajaxå¼åæ°´å¹³ã
æ¯ç«æ¯å½äº§çï¼æ¯æä¸ä¸ï¼èä¸æºç å®å ¨å ¬å¼ï¼å¯ä»¥éæ©ä¸ä¸ï¼ä¸è¿æ§è½æä¹æ ·ä¸æ¢ç¡®å®ï¼
7ãGWT
Googleç½é¡µå·¥å ·å ââGWTæä¾äºä¸ç»åºäºJavaè¯è¨çå¼åå ï¼è¿ä¸ªå¼åå ç设计åèJavaAWTå 设计ï¼ç±»å½åè§åãæ¥å£è®¾è®¡ãäºä»¶çå¬çé½åAWTé常类似ãçæJavaAWTçå¼åè ä¸éè¦è±è´¹å¤å¤§çåæ°å°±è½å¤å¿«éçç解GWTå¼åå·¥å ·å ï¼å°æ´å¤å°æ¶é´æå ¥å°GWTåºç¨çå¼åè¿ç¨ä¸ã
ä½ ä¸ç¨å»äºè§£è¿æ ·é£æ ·çjavascriptæ¡æ¶ï¼éè¿javaä½ å°±å¯ä»¥ååºåè½ä¸°å¯ççé¢ï¼å¯ä»¥ååå æµè¯ï¼æ¯ç«æ¯googleç产åï¼ä¸¥éæ¯æä¸ä¸ï¼
8ãYUI
Yahoo!UILibrary(YUI)æ¯ä¸ä¸ªå¼æ¾æºä»£ç çJavaScriptå½æ°åºï¼ä¸ºäºè½å»ºç«ä¸ä¸ªé«äºå¨çç½é¡µï¼å®éç¨äºAJAX,DHTMLåDOMçç¨å¼ç ææ¯ãå®ä¹å å«äºè®¸å¤CSSèµæºã使ç¨ææ为BSD许å¯è¯ï¼åºæ¬ä¸æ²¡æä¹ç 究è¿ï¼
YUICompressoråæ¯æºåºåçï¼è¿å¥UIåºä¸ç¥éåºç¨çæ åµæä¹æ ·ï¼
9ãSencha
Senchaæ¯ç±ExtJSãjQTouch以åRaphaelä¸ä¸ªé¡¹ç®å并èæçä¸ä¸ªæ°é¡¹ç®ã
å¤§å ¬å¸çæ¡æ¶ï¼å¹¶ä¸æ¯å æ ·åºç强强èåï¼å¼å¾æ¨èï¼
ãDojo
å¨å½å åºç¨å¥½åä¸æ¯å¾å¹¿ï¼ä¸è¿æ§è½ä¸åºè¯¥æ²¡é®é¢ã
Dojoæ¯ä¸ä¸ªç¨javascriptè¯è¨å®ç°çå¼æºDHTMLå·¥å ·å ã
æå¤ä¸ªåºéä¼çæ¯æï¼å æ¬IBMåSUNï¼é½æ¯è½¯ä»¶ççæ³°æï¼å¼å¾ä¿¡èµï¼
ãZK
ZKæ¯ä¸å¥ä»¥AJAX/XUL/Java为åºç¡çç½é¡µåºç¨ç¨å¼å¼åæ¡æ¶ï¼ç¨äºä¸°å¯ç½é¡µåºç¨ç¨å¼ç使ç¨æ¥å£ãæ大ç好å¤æ¯ï¼å¨è®¾è®¡AJAXç½ç»åºç¨ç¨å¼æ¶ï¼è½»æ¾ç®ä¾¿çæä½å°±å设计æ¡é¢ç¨å¼ä¸æ ·ãZKå å«äºä¸ä¸ªä»¥AJAX为åºç¡ãäºä»¶é©±å¨ï¼event-drivenï¼ãé«äºå¨æ§çå¼æï¼åæ¶è¿æä¾äºå¤æ ·ä¸°å¯ãå¯éå¤ä½¿ç¨çXULä¸HTMLç»ä»¶ï¼ä»¥å以XML为åºç¡ç使ç¨æ¥å£è®¾è®¡è¯è¨ZKUser-interfacesMarkupLanguage(ZUML)ã
å¨çº¿çdemo
设计å¨çdemo
æ¥åç»ä»¶
åè½ä¸°å¯ï¼å ¨é¢ï¼ææ¡£é½å ¨ï¼èä¸å级äºå¾å¤æ¬¡ï¼é常å¼å¾æ¨èï¼
ãOperaMasks-UI
OperaMasks-UIæ¯OperaMaskså¢éä¸åå¹´æé çä¸æ¬¾è½»é级å端JSç»ä»¶åºï¼æ¨å¨æä¾ä¸æ¬¾å¦ä¹ æ²çº¿ä½ãå®å¶æ§çµæ´»ãæ ·å¼ç»ä¸ï¼ä¸å¤æµè§å¨æ¯æãè¦çä¼ä¸ä¸å¡åºæ¯çå端JavaScriptUIç»ä»¶åºãç®åï¼è¯¥å¢éå·²å°è¿ä¸äº§å以LGPLå¼æºåè®®å¼æ¾ç»ç¤¾åºã
æ档丰å¯ï¼åè½é½å ¨ï¼èä¸å¾å®¹æ使ç¨åå¼åï¼èä¸æ¯å½äº§çåï¼
ãJavaFX
Sunå ¬å¸(å·²äºå¹´è¢«Oracleå ¬å¸æ¶è´)å¨å¹´ææ¥åå¸äºJavaFXææ¯çæ£å¼ç,å®ä½¿æ¨è½å©ç¨JavaFXç¼ç¨è¯è¨å¼åå¯äºèç½åºç¨ç¨åº(RIA)ãJavaFXScriptç¼ç¨è¯è¨ï¼ä»¥ä¸ç§°ä¸ºJavaFXï¼æ¯Sun微系ç»å ¬å¸å¼åçä¸ç§declarative,staticallytyped(声ææ§çãéæç±»å)èæ¬è¯è¨ãJavaFXææ¯æçè¯å¥½çåæ¯ï¼å æ¬å¯ä»¥ç´æ¥è°ç¨JavaAPIçè½åãå 为JavaFXScriptæ¯éæç±»åï¼å®åæ ·å ·æç»æå代ç ãéç¨æ§åå°è£ æ§ï¼å¦å ãç±»ã继æ¿ååç¬ç¼è¯ååå¸åå ï¼è¿äºç¹æ§ä½¿å¾ä½¿ç¨Javaææ¯å建å管ç大åç¨åºå为å¯è½ã
ç»è¯ï¼ä»¥ä¸å°±æ¯é¦å¸CTOç¬è®°ä¸ºå¤§å®¶æ´ççå ³äºDjangoå端ç¨ä»ä¹è¯è¨çå ¨é¨å 容äºï¼æè°¢æ¨è±æ¶é´é 读æ¬ç«å 容ï¼å¸æ对æ¨ææ帮å©ï¼æ´å¤å ³äºpythondjangoå端ãDjangoå端ç¨ä»ä¹è¯è¨çç¸å ³å 容å«å¿äºå¨æ¬ç«è¿è¡æ¥æ¾åã
BootCDN 风险预警,多个资源被植入后门代码
近期,多个开发者在V2EX等社区反馈,BootCDN中的资源被植入了后门代码,此情况于6月日由墨菲安全通过OSCS社区发布风险预警。多个资源,如highlight.js、vconsole.min.js、react-jsx-dev-runtime.development.js等,被发现存在投毒现象。当用户使用移动端浏览器加载包含恶意JS文件的页面时,可能被重定向至博彩或色情网站。BootCDN作为一个开源的前端资源仓库,自年上线以来,共收录了个前端开源项目,为开发者提供稳定、快速、免费的静态资源加速访问。然而,其用户基数大且活跃,过去一个月中资源请求量近亿次,显示了其广泛使用性。开发者反馈,即使引入HTTPS资源,仍存在投毒风险。建议谨慎使用BootCDN资源文件,并加入SRI(子资源完整性)配置。
在分析投毒风险时,发现恶意代码隐藏在BootCDN资源文件中。以highlight.min.js为例,当移动端请求加载cdn.bootcss.com/highlight.js时,会加载恶意的highlight.js代码。恶意代码附加在正常代码底部,需判断User-Agent中不包含Mac和Win,并且Referer中包含“.”字符时执行nRgmSS函数。恶意代码加载伪造的jQuery文件,通过pastebin.com/fuCxWTGA或指定Referer和User-Agent请求获取。
恶意jQuery源码在页面底部增加浮动广告,并引入站点访问统计脚本。当满足以下条件时,浏览器将跳转至博彩网站:用户使用移动设备访问页面,页面URL包含特定关键词,referrer不是当前页面域名或子域名且包含"."字符,且每隔一段随机时间进行跳转。恶意网址newcrbpc.com和ktyk2n.com分别于年注册,对应IP位于印度马哈拉施特拉邦和美国加利福尼亚州。
反混淆后恶意代码显示,攻击者通过CDN在特定场景下注入恶意行为,导致资源请求异常。为了排查项目中是否使用了BootCDN资源,开发者可进行关键词匹配,检查项目中是否包含“cdn.bootcss.com”、“cdn.bootcdn.net”等字样,或使用浏览器开发者工具检查是否存在以上述域名开头的请求。
预防CDN投毒,开发者应采取以下措施:使用可信的资源仓库,减少对第三方资源库的依赖;在浏览器引用外部资源时,使用SRI策略验证资源完整性;定期使用组件漏洞扫描工具检测项目,实时监控CDN流量,检测异常流量和恶意行为;采用内容安全策略限制浏览器加载和执行的内容。