カプセル化とは、強い境界線を引くことです。Web ブラウザの場合は、自分のモバイル コードが他のモバイル コードに悪用されないようにすることを意味します。サーバー上では、検証されたデータと検証されていないデータ、あるユーザーのデータと別のユーザーのデータ、またはユーザーが見ることを許可されたデータと許可されていないデータの区別などを意味する場合があります。
WebMessage message = new WebMessage(WEBVIEW_MESSAGE);
webview.postWebMessage(message, Uri.parse("*"));
*
を使用するということは、このスクリプトが生成元に関係なくウィンドウにメッセージを送信していることを示します。
o.contentWindow.postMessage(message, '*');
*
を使用するということは、このスクリプトが生成元に関係なくウィンドウにメッセージを送信していることを示します。Unsafe-URL
に設定すると、アプリケーションで機密性の高いサイトやユーザー データ (セッション トークン、ユーザー名とパスワードを含む) が第三者サイトに開示されてしまう可能性があります。Referrer-Policy
ヘッダーは、リファラー ヘッダーに関連するブラウザーの動作を制御するために導入されました。Unsafe-URL
オプションはすべての制限を解除し、リクエストごとにリファラー ヘッダーを送信します。
<http auto-config="true">
...
<headers>
...
<referrer-policy policy="unsafe-url"/>
</headers>
</http>
Content-Security-Policy-Report-Only
ヘッダーにより、Web アプリケーションの作成者や管理者はセキュリティ ポリシーを強制適用するのではなく監視することができます。このヘッダーは通常、サイトのセキュリティ ポリシーを試用および/または開発する際に使用されます。ポリシーが有効であると判断された場合、代わりに Content-Security-Policy
ヘッダー フィールドを使用すると強制適用できます。Report-Only
モードに設定します。
<http auto-config="true">
...
<headers>
...
<content-security-policy report-only="true" policy-directives="default-src https://content.cdn.example.com" />
</headers>
</http>
Content-Security-Policy-Report-Only
ヘッダーにより、Web アプリケーションの作成者や管理者はセキュリティ ポリシーを強制適用するのではなく監視することができます。このヘッダーは通常、サイトのセキュリティ ポリシーを試用および/または開発する際に使用されます。ポリシーが有効であると判断された場合、代わりに Content-Security-Policy
ヘッダーを使用して強制適用できます。Report-Only
モードに設定します。
response.content_security_policy_report_only = "*"
SLComposeServiceViewController isContentValid
を実装して受け取った信頼できないデータを使用前に検証することができません。
#import <MobileCoreServices/MobileCoreServices.h>
@interface ShareViewController : SLComposeServiceViewController
...
@end
@interface ShareViewController ()
...
@end
@implementation ShareViewController
- (void)didSelectPost {
NSExtensionItem *item = self.extensionContext.inputItems.firstObject;
NSItemProvider *itemProvider = item.attachments.firstObject;
...
// Use the received items
...
[self.extensionContext completeRequestReturningItems:@[] completionHandler:nil];
}
...
@end
SLComposeServiceViewController isContentValid
を実装して受け取った信頼できないデータを使用前に検証することができません。SLComposeServiceViewController isContentValid
コールバック メソッドを実装してデータを検証することができません。
import MobileCoreServices
class ShareViewController: SLComposeServiceViewController {
...
override func didSelectPost() {
let extensionItem = extensionContext?.inputItems.first as! NSExtensionItem
let itemProvider = extensionItem.attachments?.first as! NSItemProvider
...
// Use the received items
...
self.extensionContext?.completeRequestReturningItems([], completionHandler:nil)
}
...
}
webview
が URL を使用してアプリケーションと通信する際、受信側のアプリケーションは、通信すると想定されるアプリケーションの許可リストと送信者が一致することを検証する必要があります。受信側のアプリケーションは、UIApplicationDelegate application:openURL:options:
または UIApplicationDelegate application:openURL:sourceApplication:annotation:
委任メソッドを使用してコール URL の生成元を検証することもできます。UIApplicationDelegate application:openURL:options:
委任メソッドの実装では IPC コールの送信者の検証に失敗し、単にコール URL を処理します。
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options {
NSString *theQuery = [[url query] stringByRemovingPercentEncoding:NSUTF8StringEncoding];
NSArray *chunks = [theQuery componentsSeparatedByString:@"&"];
for (NSString* chunk in chunks) {
NSArray *keyval = [chunk componentsSeparatedByString:@"="]; NSString *key = [keyval objectAtIndex:0];
NSString *value = [keyval objectAtIndex:1];
// Do something with your key and value
}
return YES;
}
wewbview
が URL を使用してアプリケーションと通信する際、受信側のアプリケーションは、通信すると想定されるアプリケーションの許可リストと送信者が一致することを検証する必要があります。受信側のアプリケーションは、UIApplicationDelegate application:openURL:options:
または UIApplicationDelegate application:openURL:sourceApplication:annotation:
委任メソッドを使用してコール URL の生成元を検証することもできます。UIApplicationDelegate application:openURL:options:
委任メソッドの実装では IPC コールの送信者の検証に失敗し、単にコール URL を処理します。
func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool {
return processCall(url)
}
webview
が URL を使用してアプリケーションと通信する際、受信側のアプリケーションはさらに操作を進める前に、コール URL を検証する必要があります。受信側のアプリケーションは、UIApplicationDelegate application:didFinishLaunchingWithOptions:
または UIApplicationDelegate application:willFinishLaunchingWithOptions:
委任メソッドを使用してコール URL を開くことを検証することもできます。UIApplicationDelegate application:didFinishLaunchingWithOptions:
委任メソッドの実装ではコール URL の検証に失敗し、常に信頼できない URL を処理します。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NS Dictionary *)launchOptions {
return YES;
}
webview
が URL を使用してアプリケーションと通信する際、受信側のアプリケーションはさらに操作を進める前に、コール URL を検証する必要があります。受信側のアプリケーションは、UIApplicationDelegate application:didFinishLaunchingWithOptions:
または UIApplicationDelegate application:willFinishLaunchingWithOptions:
委任メソッドを使用してコール URL を開くことを検証することもできます。UIApplicationDelegate application:didFinishLaunchingWithOptions:
委任メソッドの実装ではコール URL の検証に失敗し、常に信頼できない URL を処理します。
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
return true
}