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

2020-08-18 12:12发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)嗨社区 希望有人可以在下面的...

         点击此处--->   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条回答
木偶小白
2020-08-18 12:26

您好,伊万,

当我尝试共享Gruntfile.js时,我不小心删除了太多内容。 我想删除一些额外的复杂性,这些复杂性只是为了使代码在此处更易于理解而添加的。

我尝试添加可用任务,但收到一条错误消息,说没有可用任务目标。 我尝试将任务称为" available-tasks"和" availabletasks"。 但是我不认为这可以解决任何问题,对吗?

所以现在我正在运行此:

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

 grunt.initConfig(combinedConfigs);

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

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

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

这实质上是我们在项目中所做的。 我只是不小心删除了loadNpmTasks函数,并将任务添加到了数组中。 但是我们仍然遇到问题。

这是控制台日志:

我在您的回复中不明白的一件事是为什么将index.html混淆了? 我们仅使用"'**/*。js"语句混淆.js文件。 另外,您在控制台日志中看不到没有混淆index.html吗?

现在,我删除浏览器中的所有缓存。 而且我确实部署并将其设置为活动版本。 我不知道我们是否使用过像Squid这样的任何Web代理软件,我认为 Adam Kvist Lamaa 可以在这里为我们提供帮助 。 但是,我既尝试了从家庭网络进行部署,又尝试在文件中添加简单的更改,但是我看到了已部署的应用程序中的更改,表明它是最新版本,因此我认为缓存不是问题。

在"网络"标签中,我们确实下载了Component-preload.js作为唯一被混淆的.js文件:

但是,如果您查看" Sources"内部,则可以发现控制器没有被混淆(即使第一个屏幕截图中的日志显示已被混淆):

这是哪里来的? 您可以看到它已缩小,所以发生了一些事情。 您还对此感到困惑吗? Component.js和model/models.js都不会被混淆,只有Component-preload.js文件仍然会被混淆。

如果您在Web IDE中查找dist文件夹中生成的项目,则会发现文件被混淆了:


这就是困扰我们的原因。
我们还尝试了将dist文件夹导出为zip文件。 浏览压缩文件,查看是否找到未混淆的源代码。 没有。 这意味着,通过清除所有可能的缓存,尝试另一个Cloud Platform子帐户,尝试由另一台设备和另一种浏览器软件进行部署,我们应该消除看到任何源代码的任何可能性。

因此,我们尝试在Web IDE中导入导出的dist文件夹。 这个项目当然已经建立了,所以我们找不到例如Gruntfile。 但是.js文件仍然被混淆。 因此,如果我们随后将该项目(因为它已经构建好了,则速度更快)部署到另一个子帐户并完成上面编写的所有操作,那么客户端应该不会以任何方式查看源代码。

但是,在已部署应用程序的源代码中,我们仍然看到相同的结果。 由于Component-preload.js仍然被混淆的某些原因,而控制器,models.js和Component.js的源代码似乎无处不在。

有关此问题的一些灰色区域:

Component-preload.js似乎在起作用,或者源代码来自其他地方,因为"网络"选项卡显示仅下载component-preload.js,而不下载其他组件(缓存当然已清除)

为什么component-preload.js作为构建中唯一的新生成文件,却只有一个模糊不清?

希望这可以澄清我们的情况,并且您实际上可以在"源"选项卡中看到相同的问题,因此可以为我们提供帮助。

最好的问候,
Emil Sarkisi Stepanian

一周热门 更多>