为什么混淆的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: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

一周热门 更多>