使用servlet从/WEB-INF/异步加载javascript:一般注意事项

loading javascript asynchronously from /WEB-INF/ using a servlet: general concern

本文关键字:注意事项 javascript 异步 servlet WEB-INF 使用 加载      更新时间:2023-09-26

我正在使用servlet在Java EE web应用程序中异步加载javascript文件。

js文件位于/WEB-INF/js/文件夹下。

工艺流程如下:

index.jsp中:

<script src="/servlet/mainLoader.js">

servlet完成了从/WEB-INF/js/内部获取js文件的必要工作。

因此,基本上,我调用一个主js文件mainLoader.js,它本身会加载我的应用程序中的其余js文件。这种架构背后的原因是在js文件中隐藏一些关键信息,因此用户将无法浏览文件的路径并检查源代码

我有两个问题:
-这被认为是一种不好的做法吗
-目前,我正在本地(localhost)开发我的应用程序,当我转到生产模式时,这个js加载系统会引起问题吗?我的意思是,远程用户在不在本地主机上的情况下可以卸载js文件吗?

答案:
@BalusC让我意识到我选择的错误在哪里。我没有意识到这种JS抓取只适用于GET请求。我认为它可以使用POST,从而禁用servlet上的GET方法(这样就不能直接从url栏访问JS)

此外,@David所说的是真的,但我试图让阅读JS源代码变得不那么简单。

因此,我发现@Todd Chaffee是绝对正确的,吸取的教训是:
"1)默默无闻的安全是一种有记录的不良做法。"

您不能向用户隐藏JavaScript代码。即使通过脚本标记注入额外的代码,用户也可以在firebug等工具的帮助下获得代码。

如果你想保护代码,你应该看看"迷你程序"answers"代码混淆"。尽管如此,这不会保护密码等敏感数据。

两个问题的答案:

1) 默默无闻的安全是一种有案可稽的不良做法。

http://en.wikipedia.org/wiki/Security_through_obscurity

2) 远程用户必须能够下载浏览器使用的任何js文件。所以他们肯定可以访问你的脚本。我不认为脚本存在于本地文件系统中,并从本地主机转移到生产环境中有问题,但为什么不测试一下呢?

根据最初的问题:

-这被认为是一种糟糕的做法吗

这不一定是一种糟糕的做法。这显然没有道理。为什么要接管servlet容器的内置默认servlet的工作?

-目前我正在本地开发我的应用程序(localhost),当我转到生产模式时,这个js加载系统会引起问题吗?我的意思是,远程用户在不在本地主机上的情况下可以卸载js文件吗

这表明您认为Java代码运行在Web浏览器(客户端)中。这种假设是错误的。Java代码在Web服务器(服务器端)上运行。只要你不改变相对URL,它就会同样有效。


根据评论:

我没有意识到的是,这种JS抓取目前只适用于GET请求。由于它不适用于POST(我本来打算这么做),所以是的,用户可以通过url栏访问JS

对于"中间人"攻击,POST绝对不比GET更"安全"。POST仅用于非幂等请求,而GET用于幂等请求。防止HTTP请求受到"中间人"攻击的唯一方法是使用HTTPS。

相关文章: