Google apps script 应用程序脚本专用函数
在GoogleApps脚本文档中,有一个关于服务器端私有函数的页面。这应该可以解释,如果没有专用功能,服务器代码可以从用户浏览器中看到。 有人能解释一下你是如何在浏览器中看到这样的服务器端功能的吗? 谢谢Google apps script 应用程序脚本专用函数,google-apps-script,Google Apps Script,在GoogleApps脚本文档中,有一个关于服务器端私有函数的页面。这应该可以解释,如果没有专用功能,服务器代码可以从用户浏览器中看到。 有人能解释一下你是如何在浏览器中看到这样的服务器端功能的吗? 谢谢 请参阅:服务器代码在用户浏览器上永远不可见,只有函数名。私有函数隐藏了这些名称,但更重要的是,它们取消了前端直接调用这些名称的功能 换句话说,私有函数允许您定义后端入口点,防止恶意用户绕过您可能进行的某些检查,直接调用“内部”函数 为了展示查看名称和调用任何非私有后端函数是多么容易,我举了这个
请参阅:服务器代码在用户浏览器上永远不可见,只有函数名。私有函数隐藏了这些名称,但更重要的是,它们取消了前端直接调用这些名称的功能 换句话说,私有函数允许您定义后端入口点,防止恶意用户绕过您可能进行的某些检查,直接调用“内部”函数 为了展示查看名称和调用任何非私有后端函数是多么容易,我举了这个示例,其中我们检查
google.script.run
对象:
function myFunction(){}
函数另一个函数(){}
函数privateFunction_uz(){}
函数doGet(){
返回HtmlService.createHtmlOutput(
“”+
“var s=”;对于(google.script.run中的var prop)s+=prop+'
”+
“document.getElementById('output')。innerHTML=s;”
);
}
以下是已发布的示例:
及其源代码(同上):
--在评论中提出问题
无法将
doGet
函数设为私有函数,因为其名称是固定/预定义的。但这并不是一个真正的问题,因为这个函数无论如何都应该是一个入口点,因为您希望从用户的浏览器调用它,并且可以相应地进行参数检查等。服务器代码在用户的浏览器上永远不可见,只有函数名。私有函数隐藏了这些名称,但更重要的是,它们取消了前端直接调用这些名称的功能
换句话说,私有函数允许您定义后端入口点,防止恶意用户绕过您可能进行的某些检查,直接调用“内部”函数
为了展示查看名称和调用任何非私有后端函数是多么容易,我举了这个示例,其中我们检查google.script.run
对象:
function myFunction(){}
函数另一个函数(){}
函数privateFunction_uz(){}
函数doGet(){
返回HtmlService.createHtmlOutput(
“”+
“var s=”;对于(google.script.run中的var prop)s+=prop+'
”+
“document.getElementById('output')。innerHTML=s;”
);
}
以下是已发布的示例:
及其源代码(同上):
--在评论中提出问题
无法将
doGet
函数设为私有函数,因为其名称是固定/预定义的。但这并不是一个真正的问题,因为这个函数应该是一个入口点,因为您希望从用户的浏览器调用它,并且可以相应地进行参数检查等。非常感谢Henrique的回答。这是否意味着只能看到服务器端函数的名称,而不能看到它们的内容?是的,没错。但也可以调用(即执行)所有“公共”函数。因此,在执行任何操作(在此类函数中)之前,您应该始终检查您的参数。因此,doGet
函数也会显示/公开。一定存在与此相关的风险。你不能在它的末尾添加一个。
,那么你所能做的就是让doGet
函数调用一个私有函数,这样它的内部逻辑就不能被客户端使用了,对吧?不是真的@imthenanchoman,目标不是隐藏已经隐藏的代码/逻辑。\
诀窍是不允许前端直接调用这些函数,基本上是决定允许前端使用哪些入口点来启动操作。我将编辑我的答案,试图澄清这一点。非常感谢Henrique的回答。这是否意味着只能看到服务器端函数的名称,而不能看到它们的内容?是的,没错。但也可以调用(即执行)所有“公共”函数。因此,在执行任何操作(在此类函数中)之前,您应该始终检查您的参数。因此,doGet
函数也会显示/公开。一定存在与此相关的风险。你不能在它的末尾添加一个。
,那么你所能做的就是让doGet
函数调用一个私有函数,这样它的内部逻辑就不能被客户端使用了,对吧?不是真的@imthenanchoman,目标不是隐藏已经隐藏的代码/逻辑。\
诀窍是不允许前端直接调用这些函数,基本上是决定允许前端使用哪些入口点来启动操作。我将编辑我的答案,试图澄清这一点。