为什么混淆的SAPUI5 App .js文件在浏览器开发工具中显示为缩小版本?

2020-08-18 12:12发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨社区


希望有人可以在下面的难题中给出提示。

我们正在寻找对SAPUI5应用程序中的.js文件进行混淆的方法。 在构建项目时,我们设法增强了Gruntfile使其包含混淆步骤。 如果我们查看/dist文件夹,则所有文件都是我们期望的被混淆的文件。


但是,当我们部署项目并在浏览器开发工具中检查源文件时,我们得到的是缩小文件,而不是经过混淆的文件。 从本质上来说,使混淆变得毫无价值,因为"源"文件可用于项目部署位置的任何使用者。

有人可以帮助解释为什么在加载已部署的SAPUI5应用程序而不是混淆的SAPUI5应用程序时看到.js文件的缩小版本吗?

感觉SCP会将源代码的副本保存在某个地方并与客户端共享。

一些背景信息:

  • Component-preload.js文件也已被混淆。
  • 我们尝试排除/dist文件夹中包含源代码的-dbg.js文件。
  • 我们尝试将/dist文件夹复制到一个新项目中,并将其作为独立版本部署,其中所有.js文件都已被混淆。
  • 我们尝试将混淆后的项目部署在另一个SCP帐户上,并使用另一台PC排除缓存。
  • 当我们从SAP Web IDE Full Stack运行应用程序时,我们会在浏览器开发工具中看到混淆的文件。
  • 这是我们当前正在使用的混淆设置:
    obfuscationOptions = { controlFlowFlattening:true,
    controlFlowFlatteningThreshold:0.75,
    deadCodeInjection:true,
    deadCodeInjectionThreshold:0.4,
    debugProtection:false,
    debugProtectionInterval:false,
    disableConsoleOutput:false,
    identifierNamesGenerator:'十六进制',
    log:false,
    namedGlobals:false ,
    rotationStringArray:true,
    selfDefending:true,
    stringArray:true,
    stringArrayEncoding:'base64',
    stringArrayThreshold:0.75,
    transformObjectKeys:true,
    unicodeEscapeSequence: false
    };

任何帮助或提示将不胜感激。

谢谢

Adam lamaa

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨社区


希望有人可以在下面的难题中给出提示。

我们正在寻找对SAPUI5应用程序中的.js文件进行混淆的方法。 在构建项目时,我们设法增强了Gruntfile使其包含混淆步骤。 如果我们查看/dist文件夹,则所有文件都是我们期望的被混淆的文件。


但是,当我们部署项目并在浏览器开发工具中检查源文件时,我们得到的是缩小文件,而不是经过混淆的文件。 从本质上来说,使混淆变得毫无价值,因为"源"文件可用于项目部署位置的任何使用者。

有人可以帮助解释为什么在加载已部署的SAPUI5应用程序而不是混淆的SAPUI5应用程序时看到.js文件的缩小版本吗?

感觉SCP会将源代码的副本保存在某个地方并与客户端共享。

一些背景信息:

  • Component-preload.js文件也已被混淆。
  • 我们尝试排除/dist文件夹中包含源代码的-dbg.js文件。
  • 我们尝试将/dist文件夹复制到一个新项目中,并将其作为独立版本部署,其中所有.js文件都已被混淆。
  • 我们尝试将混淆后的项目部署在另一个SCP帐户上,并使用另一台PC排除缓存。
  • 当我们从SAP Web IDE Full Stack运行应用程序时,我们会在浏览器开发工具中看到混淆的文件。
  • 这是我们当前正在使用的混淆设置:
    obfuscationOptions = { controlFlowFlattening:true,
    controlFlowFlatteningThreshold:0.75,
    deadCodeInjection:true,
    deadCodeInjectionThreshold:0.4,
    debugProtection:false,
    debugProtectionInterval:false,
    disableConsoleOutput:false,
    identifierNamesGenerator:'十六进制',
    log:false,
    namedGlobals:false ,
    rotationStringArray:true,
    selfDefending:true,
    stringArray:true,
    stringArrayEncoding:'base64',
    stringArrayThreshold:0.75,
    transformObjectKeys:true,
    unicodeEscapeSequence: false
    };

任何帮助或提示将不胜感激。

谢谢

Adam lamaa

付费偷看设置
发送
8条回答
悠然的二货
1楼 · 2020-08-18 12:43.采纳回答

嗨,埃米尔,

在Chrome开发人员工具的"来源"标签下,所有未混淆的文件都显示在" <未知>"位置。 这意味着它们位于浏览器的内存中,但是没有作为资源从任何服务器加载。 它们由Component-Preload.js资源放在那里。 即使该JS文件被混淆(人类不可读),浏览器仍能够读取和解释它。 因此,它的作用是将所有应用程序javascript文件加载到内存中。 一旦将其加载到内存中,浏览器将使它们再次变得可读。 我找不到与之相关的任何官方google文档-这是简单的经验信息。

这种预加载技术的实现方式是,它可以缩短应用程序的加载时间。 它向服务器执行单个请求,而不是多个请求,这反过来又会使您的应用程序加载速度变慢(在发出每个请求后,浏览器将不得不等待将所有js文件加载到内存中-因此屏幕将一片空白 直到它可以为您呈现UI为止。 预加载将在一瞬间将所有内容加载到内存中的速度更快-因此您的应用程序将显示得更快。

为避免所有这些情况,您必须从以下位置删除Component-Preload.js文件 dist文件夹。 然后,这将迫使浏览器从服务器加载js文件-因此它将在自己的请求中加载每个文件。 当然,这会使您的应用程序加载时间效率降低。

但是,我必须说,试图混淆已部署应用程序中的源代码不会阻止人们弄清楚文件上写的内容 。 大多数浏览器的开发人员工具都具有一项功能,可以即时缩小/缩小外观并模糊化源代码。 例如,Chrome浏览器具有一个按钮,可将缩小的源转换为任何开发人员都可以解释的格式化源。 我记得曾经看到过这样的功能,也可以对混淆的源代码执行同样的功能。

因此,如果您打算保护知识产权,那么对源代码进行混淆就不会为您做这件事。 相反,它可能阻止用户利用更快的应用程序加载时间。

我建议您将任何需要保护的复杂逻辑放在SAPUI5应用程序正在使用的服务下。 您将以这样的方式进行操作,即您的UI仅负责显示/输入数据,而不负责处理数据。

最好的问候,
Ivan

葫芦娃快救爷爷
2楼-- · 2020-08-18 12:29

嗨 伊万,


一如既往,感谢您的输入,非常有帮助。

在错误的假设下,混淆会给代码带来更高程度的模糊。


致谢
亚当·喇嘛

软件心理学工程师
3楼-- · 2020-08-18 12:35

嗨,亚当,

如果您使用名为" @ sap/grunt-sapui5-bestpractice-build的Grunt Task" "执行此任务后,您不能再依赖其他任务来更改dist文件夹。 它将清理目标文件夹并写入新文件。 它可以自动执行最常见的sapui5构建过程。 因此,执行此任务后,必须对dist文件夹中的文件进行任何处理。

BTW:最佳实践会自动创建ComponentPreload.js文件。 您可以从dist文件夹中删除该文件,也可以对其进行混淆。 如果不这样做,您的浏览器将从ComponentPreload加载javascript定义,而不是从经过混淆的文件加载。

最好的问候,
伊万

lukcy2020
4楼-- · 2020-08-18 12:29

嗨,伊万,

我是亚当的同事,并且在同一个项目上工作。

我们将混淆任务添加到构建任务之后:它执行:" clean"," lint"," build",然后是" obfuscate"。

它被设置为混淆在生成任务之后生成的所有 .js文件。 这也意味着自动生成的component-preload.js文件也会被混淆。 Web IDE中的内置控制台显示混淆处理是" cleanupChanges"子任务之后的最后一个任务。

真正奇怪的是,当我们导出dist文件夹并在计算机上本地浏览所有文件时,根本没有包含未混淆源代码的文件。 一切都被混淆了。 但是,当我们将相同的dist文件夹导入Web IDE并进行部署时,然后在已部署的应用程序上浏览浏览器的调试工具时,就会看到源代码。

希望这可以澄清我们的情况。

最好的问候,
Emil

浮生未央
5楼-- · 2020-08-18 12:21

嗨,大家好,

请分享一下

最诚挚的问候,
伊万

Climb_Ma
6楼-- · 2020-08-18 12:23

嗨,埃米尔,

我在dist文件夹下找不到任何混淆的文件。 您确定这个Gruntfile确实在'build'之后调用了所需的任务吗?

最好的问候,
Ivan

Violet凡
7楼-- · 2020-08-18 12:39

嗨,Emil,

我对您的grunt文件做了一些修改-本质上是从grunt插件模块加载任务,并将其包含在每个默认执行中。 现在,我可以看到dist文件夹中所有文件被混淆了。 这是我所做的修改:

 var CombinedConfigs = Object.assign({},gruntConfig,gruntNewConfigs);

 grunt.initConfig(combinedConfigs);

 grunt.loadNpmTasks('grunt-available-tasks');
 grunt.loadNpmTasks('grunt-javascript-obfuscator');

 var task = [" availabletasks"," clean"," lint"," build"," javascript_obfuscator"];

 grunt.registerTask(" default",任务);
 

注意:我添加了可用任务只是为了确保Grunt正在加载混淆器任务。 这是我的package.json中的行(我没有使用生产依赖项,因为这里不需要它们):

" devDependencies":{
 " @ sap/grunt-sapui5-bestpractice-build":" 1.3.62",
 " javascript-obfuscator":" 0.18.1",
 " grunt-javascript-obfuscator":" 1.1.0",
 " grunt-available-tasks":" 0.5.0"
 }
 

此后,当我使用WebIDE部署应用程序时,它显示以下日志消息(告诉我Grunt正在运行并正在调用混淆插件):

当我运行应用的新版本活动版本时,它会显示index.html被混淆,例如:

ComponentPreload.js文件也是如此:

我认为应该检查两件事:

1)缓存代理:您可能正在使用Web代理软件,例如Squid 而是为您缓存页面,而不是从服务器加载页面。 您的浏览器也可能提供了此缓存页面。 为了确保您的浏览器没有从缓存中加载资源,请使用Chrome开发者工具"网络"标签下的"禁用缓存"选项。 为了防止它从您的代理加载,建议您与您的代理管理员联系。

2)每当您从WebIDE部署html5应用程序时,它将向您显示一个屏幕,其中包含当前 部署版本以及当前处于活动状态的版本。 您可以选择部署新版本(我已经这样做了-您可以在日志中看到版本1.0.3)。 您可能已将WebIDE部署设置为部署新版本而不先激活它。 这将防止您加载混淆的版本。 并且,当您将其加载到浏览器中时,它将显示未混淆的活动版本。

希望这会有所帮助!

最诚挚的问候,
Ivan

# p#

嗨,伊万·米里索拉

我只是想问一问 您设法重现了我的最新评论,或者是否需要进一步澄清?

我们非常感谢您的评论和帮助,因为我们在这方面没有经验。

最好的问候,
Emil Stepanian

一周热门 更多>