我有点紧张,正在开发一个基金经纪人网站.
作为我们安全策略的一部分,CSP在我们的服务器上实现,但现在,我们正在实施与斯堪的纳维亚银行(BankID)提供的桌面软件的通信.
有了这个,出现了一个问题:要打开BankID桌面软件,应该使用自定义协议单击一个链接,如下所示:
bankid://?orderref=[GUID]&autostarttoken=[GUID]
Run Code Online (Sandbox Code Playgroud)
我确信您理解,我遇到严重问题,允许通过我们的CSP政策进行此链接.我的搜索没有产生任何结果,我的想法已经用完了.
我试图在协议下尝试允许通配符域:
Content-Security-Policy: default-src 'self' bankid://*;
Run Code Online (Sandbox Code Playgroud)
如果我关闭CSP,它的效果非常好,所以这绝对是个问题.
有人对此有经验吗?任何帮助是极大的赞赏.
经过几个小时的搜索,我在Mozilla Wiki上找到了以下内容:
我们需要一种应用程序交付机制,它可以保证应用程序的完整性和真实性,还可以实现定义明确的应用程序和权限范围,从而可以在运行时维护完整性.
并进一步:
特权和认证的应用程序将通过一个独特的方案(app://)访问.域名将对应于应用ID.
我不确定这是否适用,但如果我认为这是正确的,那就意味着Mozilla正在考虑如何解决这个问题.
我正在研究如何使用自定义 URL 应用程序协议(例如 custom://)来启动我本地安装的应用程序。当我在 http(没有 SSL)上访问我的网站时,一切都运行良好,当进入页面时,本地应用程序开始启动。
切换到 https 网站显示“安全”标志,但当导航到该页面时,本地应用程序已启动,但“安全”标志消失了调试页面时,它显示消息:混合内容:页面在 'https:// ....' 已通过 HTTPS 加载,但请求了不安全的资源 'custom://myapp/jivknjco'。此内容也应通过 HTTPS 提供。” 正在出现。
我该如何解决这个问题?
我已经根据https://gist.github.com/aaronk6/d801d750f14ac31845e8实施了一个解决方案 ,它一直工作到 chrome 85 。使用最新的 chrome Update Onblur 没有检测到开放协议处理程序弹出窗口。有没有办法使用 Chrome 86 新版本识别在 windows 中注册的自定义协议。下面提到的我实现的代码,它适用于 Firefox
function LinkClicked() {
launchUri($(this).attr("href"), function () {
// SUCCESS APPLICATION INSTALLED
}, function () {
// PROTOCOL NOT REGISTERD IN REGISTRY
setTimeout(showAppInstallWarningMessage, 4000);
}, function () {
// STATUS CANNOT IDENTIFY
setTimeout(showAppInstallWarningMessage, 4000);
});
}
function launchUri(uri, successCallback, noHandlerCallback, unknownCallback) {
var res, parent, popup, iframe, timer, timeout, blurHandler, timeoutHandler, browser;
function callback(cb) {
if (typeof cb === 'function') cb();
}
function createHiddenIframe(parent) …Run Code Online (Sandbox Code Playgroud) javascript google-chrome custom-protocol chromium google-chrome-app
我需要运行我的自定义协议两次,但第二次不起作用,我收到此错误(不允许启动“cutomProtocol”,因为需要用户手势。)我试图找到解决方案,但没有找到任何解决方案!
chrome、firefox 和 Edge 也有同样的问题。

我需要看到这个弹出窗口两次

window.location.href = 'my-protocol://${base64}';
和
customProtocolVerify(
`my-protocol://${base64}`,
() => {
// successCb: Callback function which gets called when custom protocol is found.
console.log('My protocol found and opened the file successfully..');
},
() => {
// failCb: Callback function which gets called when custom protocol not found.
console.log('My protocol not found.');
}
);
Run Code Online (Sandbox Code Playgroud)
我尝试了这两个但没有成功
澄清
我有一个自定义协议。
我的场景:
customProtocolVerify方法),并且如果找到协议,该方法就会启动我的问题:
步骤 3 不起作用,控制台上出现错误,显示“不允许启动...”,当然我看不到打开协议的弹出窗口。
我请求帮助以使第 3 步顺利进行
我正在研究是否可以使用自定义URL应用程序协议(例如custom://)来启动我的应用程序,但看起来所有实现都修改了HKCR.这导致一些讨厌的安全警告(我相信因为UAC).有谁知道是否可以安装自定义URL协议作为HKCU级别?或者另一种避免这些警告的方法?
谢谢!
我知道这很可能是一个蹩脚的问题,但是我连续三次全力以赴,而且我非常模糊.我是Objective C和Cocoa Touch的新手.
我创建了一个提供委托方法的类.我将使用简化的示例代码,因为细节并不重要.头文件如下所示:
#import <Foundation/Foundation.h>
@protocol UsernameCheckerDelegate <NSObject>
@required
- (void)didTheRequestedThing:(BOOL)wasSuccessful;
@end
@interface TheDelegateClass : NSObject {
id <TheDelegateClassDelegate> tdcDelegate;
}
@property (assign) id <TheDelegateClassDelegate> tdcDelegate;
- (void)methodThatDoesSomething:(int)theValue;
@end
Run Code Online (Sandbox Code Playgroud)
源文件如下所示:
#import "TheDelegateClass.h"
@implementation TheDelegateClass
@synthesize tdcDelegate;
- (void)methodThatDoesSomething:(int)theValue {
if (theValue > 10) {
[[self tdcDelegate] didTheRequestedThing:NO];
// POINT A
}
// POINT B
int newValue = theValue * 10;
NSString *subject = [NSString stringWithFormat:@"Hey Bob, %i", newValue];
// Some more stuff here, send an email or something, whatever …Run Code Online (Sandbox Code Playgroud) javascript ×2
protocols ×2
angular ×1
bankid ×1
browser ×1
chromium ×1
delegates ×1
gesture ×1
https ×1
ios ×1
iphone ×1
objective-c ×1
ssl ×1
url-protocol ×1