在调用之间注入函数
Inject function between calls
编辑:只是要明确一点:我的问题是:有可能动态地在页面上的所有其他函数调用之前注入一个函数。
我希望单个函数在所有函数调用之前注入自己。我正在尝试为JS应用程序实现访问控制列表。例如
用户fred可以访问app.addPage()
功能,但不能访问app.removePage();
功能
那么,现在我该如何在调用看门人函数之后调用原始函数呢?
我想我可以修改我的应用程序,使每个方法调用看起来像这样:
app.acl().functionCall();
但我想在函数调用之前以某种动态方式自动注入acl()
。可能的
试图在客户端应用程序中施加这种安全控制是徒劳的。即使你可以,比如说,覆盖Function.prototype
,一个没有特权的用户仍然可以出现,并用原始功能重新覆盖它。或者更改一个变量以使自己享有特权。或者只需构建一个POST
请求并直接将其发送到服务器,完全绕过脚本。没有办法绝对强制执行您在客户端代码中尝试执行的操作。
然而,如果您这样做是为了方便而不是安全,请考虑以下内容:
// define your functions as usual
app.showCatVideo = function (...) { /* ... */ }
app.deletePage = function(...) { /* ... */ }
app.dropBombs = function(...) { /* ... */ }
// specify which ones are privileged
var privilegedFunctionNames = [ "deletePage", "dropBombs" ];
for( var i = 0; i < privilegedFunctionNames.length; i++ ) {
var funcName = privilegedFunctionNames[ i ],
, origFunc = app[ funcName ];
;
delete app[ funcName ];
// replace the function with this one
app[ funcName ] = function() {
// check the user
if( theUser.isPrivileged() ) {
// call the original function with the arguments passed
return origFunc.apply( app, arguments );
}
else {
// hissy fit
alert( "Unauthorized!" );
}
}
}
这只是用一个函数包装您指定的函数(在privilegedFunctionNames
中),该函数首先检查用户是否有特权,如果有,则调用该函数,如果没有,则发出警报。
不过,正如我所说,这没有安全优势。如果有人知道如何使用FireBug,他们已经成功击败了这一点——你可以想出的任何其他客户端技巧。
相关文章:
- 使用index.ts文件导出类会导致注入的构造函数中未定义
- 通过innerHTML注入脚本:函数与全局
- 使用依赖注入在 JavaScript 中返回函数
- 注入函数中的 JavaScript 范围
- 解析未在控制器 [Angular JS] 中注入的函数
- 当使用Angular1+ES6时,控制器函数中未定义依赖注入,控制器是一个类
- 如何从注入的脚本中调用函数
- 如何将服务注入链接函数包含指令
- 如何检查注入函数的参数
- Android webview:向复选框的onclick事件注入函数调用
- 如何在函数中注入/覆盖代码?最佳实践
- 如何在 JavaScript 中需要它们的函数之外访问唯一注入的依赖项值
- 如何将函数注入现有对象
- 在UIWebView的Objective-c中注入JQuery函数
- 使用依赖关系注入将参数传递给命名函数
- 将JavaScript函数注入UIWebView不总是工作
- 将javascript函数注入Iframe中
- 我如何使用切片javascript函数注入字符串到表单字段
- Javascript:是否可以将新函数注入基类/对象'这将在所有子类/对象'
- 将函数注入带有下划线的链的方法