カプセル化とは、強い境界線を引くことです。Web ブラウザの場合は、自分のモバイル コードが他のモバイル コードに悪用されないようにすることを意味します。サーバー上では、検証されたデータと検証されていないデータ、あるユーザーのデータと別のユーザーのデータ、またはユーザーが見ることを許可されたデータと許可されていないデータの区別などを意味する場合があります。
url-invoke-disallowed
設定に依存すると、明確性に欠け、そのデフォルトが予期せず変更された場合、望ましくない動作が発生する可能性があります。HTTP 403
ステータス コードを受け取ります。しかし、暗黙的な設定に依存すると明確性に欠け、デフォルト設定が変更された場合、望ましくない動作が発生する可能性があります。url-invoke-disallowed
設定を使用して設定されたタスク フローの例を示します。
...
<task-flow-definition id="password">
<default-activity>PasswordPrompt</default-activity>
<view id="PasswordPrompt">
<page>/PasswordPrompt.jsff</page>
</view>
<use-page-fragments/>
</task-flow-definition>
...
Resources:
EBSVOLExample:
Type: AWS::EC2::Volume
Properties:
Encrypted: false
{
"AWSTemplateFormatVersion": "2010-09-09",
"Resources": {
"MyMethod0": {
"Type": "AWS::ApiGateway::Method",
"Properties": {
"RestApiId": "MyAPIID",
"ResourceId": "MyResourceID",
"HttpMethod": "GET",
"AuthorizationType": "NONE"
}
},
"MyMethod1": {
"Type": "AWS::ApiGateway::Method",
"Properties": {
"RestApiId": "MyAPIID",
"ResourceId": "MyResourceID",
"HttpMethod": "POST",
"AuthorizationType": "NONE",
"ApiKeyRequired": false
}
}
}
}
AWSTemplateFormatVersion: "2010-09-09"
Description: "Example"
Resources:
TestMethod:
Type: "AWS::ApiGateway::Method"
Properties:
RestApiId: !Ref restAPIRes
ResourceId: !GetAtt
- restAPIRes
- RootResourceId
HttpMethod: GET
AuthorizationType: NONE
{
"Resources": {
"LambdaPerm": {
"Type": "AWS::Lambda::Permission",
"Properties": {
"SourceAccount": "AWS::AccountId",
"SourceArn": "bucket.Arn",
"FunctionName": "function.Arn",
"Action": "lambda:InvokeFunction",
"Principal": "*"
}
}
},
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "Lambda Permission"
}
AWSTemplateFormatVersion: "2010-09-09"
Description: Lambda Permission
Resources:
LambdaPerm:
Type: AWS::Lambda::Permission
Properties:
FunctionName: !GetAtt function.Arn
Action: lambda:InvokeFunction
Principal: "*"
SourceAccount: !Ref "AWS::AccountId"
SourceArn: !GetAtt bucket.Arn
"Resources": {
"DocDBDefault": {
"Type": "AWS::DocDB::DBCluster",
"Properties": {
"MasterUsername": "name",
"MasterUserPassword": "password"
}
}
Resources:
DocDBDInst:
Type: AWS::DocDB::DBCluster
Properties:
MasterUsername: myUser
MasterUserPassword: password
"Resources": {
"EBSVOLExample": {
"Type": "AWS::EC2::Volume",
"Properties": {
"Encrypted": false,
}
}
}
Resources:
EBSVOLExample:
Type: AWS::EC2::Volume
Properties:
Encrypted: false
{
"Description": "ElastiCache redis",
"Resources": {
"MyReplicationGroup": {
"Type": "AWS::ElastiCache::ReplicationGroup",
"Properties": {
"AutomaticFailoverEnabled": true,
"CacheNodeType": {
"Ref": "CacheNodeType"
},
Cache "ParameterGroupName": {
"Ref": "CacheParameterGroup"
},
"CacheSubnetGroupName": {
"Ref": "CacheSubnetGroupName"
},
"Engine": "redis",
"EngineVersion": {
"Ref": "EngineVersion"
},
"NumNodeGroups": {
"Ref": "NumShards"
},
"ReplicasPerNodeGroup": {
"Ref": "NumReplicas"
},
"PreferredMaintenanceWindow": "sat:10:00-sat:08:00",
"SecurityGroupIds": [
{
"Ref": "SecurityGroup"
}
],
"SnapshotRetentionLimit": {
"Ref": "SnapshotRetentionLimit"
},
"SnapshotWindow": "00:00-03:00"
},
"UpdatePolicy": {
"UseOnlineResharding": true
}
}
}
}
Description: 'ElastiCache redis'
Resources:
MyReplicationGroup:
Type: AWS::ElastiCache::ReplicationGroup
Properties:
AutomaticFailoverEnabled: true
CacheNodeType: !Ref CacheNodeType
CacheParameterGroupName: !Ref CacheParameterGroup
CacheSubnetGroupName: !Ref CacheSubnetGroupName
Engine: redis
EngineVersion: !Ref EngineVersion
NumNodeGroups: !Ref NumShards
ReplicasPerNodeGroup: !Ref NumReplicas
PreferredMaintenanceWindow: 'sat:10:00-sat:08:00'
SecurityGroupIds:
- !Ref SecurityGroup
SnapshotRetentionLimit: !Ref SnapshotRetentionLimit
SnapshotWindow: '00:00-03:00'
UpdatePolicy:
UseOnlineResharding: true
{
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "My Neptune DB cluster",
"Resources": {
"NeptuneDBCluster": {
"Type": "AWS::Neptune::DBCluster",
"Properties": {
"BackupRetentionPeriod": 10,
"DBClusterIdentifier": "MyDBClusterIdentifier",
"DBClusterParameterGroupName": "MyNeptuneDBClusterParameterGroup",
"DBSubnetGroupName": "MyNeptuneDBSubnetGroup",
"IamAuthEnabled": true,
"Port": 8080,
"PreferredBackupWindow": "NeptuneDBClusterPreferredBackupWindow",
"PreferredMaintenanceWindow": "NeptuneDBClusterPreferredMaintenanceWindow"
}
}
}
}
AWSTemplateFormatVersion: 2010-09-09
Description: My Neptune DB cluster
Resources:
NeptuneDBCluster:
Type: "AWS::Neptune::DBCluster"
Properties:
BackupRetentionPeriod: 10
DBClusterIdentifier: MyDBClusterIdentifier
DBClusterParameterGroupName: MyNeptuneDBClusterParameterGroup
DBSubnetGroupName: MyNeptuneDBSubnetGroup
IamAuthEnabled: true
Port: 8080
PreferredBackupWindow: NeptuneDBClusterPreferredBackupWindow
PreferredMaintenanceWindow: NeptuneDBClusterPreferredMaintenanceWindow
"Resources": {
"RDSDBExample": {
"Type": "AWS::RDS::DBInstance",
"Properties": {
"StorageEncrypted": false,
"DBName": "Test DB",
"DBInstanceClass": "db.m4.large"
}
}
}
"Resources": {
"RedshiftClusterTest": {
"Type": "AWS::Redshift::Cluster",
"Properties": {
"DBName": "mydb",
"MasterUsername": "master",
"MasterUserPassword": "masterPass",
"NodeType": "ds2.xlarge",
"ClusterType": "single-node",
}
}
{
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "My SNS topic",
"Resources": {
"MySNSTopic": {
"Type": "AWS::SNS::Topic",
"Properties": {
"Subscription": [
{
"Endpoint": "MySNSEndpoint",
"Protocol": "sqs"
}
],
"TopicName": "MyTopic"
}
}
}
}
AWSTemplateFormatVersion: 2010-09-09
Description: My SNS Topic
Resources:
MySNSTopic:
Type: AWS::SNS::Topic
Properties:
Subscription:
- Endpoint: "MySNSEndpoint"
Protocol: "sqs"
TopicName: "SampleTopic"
kSecAccessControlUserPresence
: タッチ ID またはパスコードでのアクセスへの制約。タッチ ID が使用可能である、または登録されている必要はありません。フィンガープリントが追加または削除された場合でも、引き続きタッチ ID でアイテムにアクセスできます。kSecAccessControlTouchIDAny
: 登録されている任意のフィンガープリントのタッチ ID でのアクセスへの制約。フィンガープリントが追加または削除された場合、アイテムは無効化されません。kSecAccessControlTouchIDCurrentSet
: 現在登録されているフィンガープリントのタッチ ID でのアクセスへの制約。フィンガープリントが追加または削除された場合、アイテムは無効化されます。kSecAccessControlTouchIDCurrentSet
属性を使用して、フィンガープリントが今後追加または削除されるのを防ぐ必要があります。kSecAccessControlTouchIDAny
制約を使用しています。
...
SecAccessControlRef sacRef = SecAccessControlCreateWithFlags(kCFAllocatorDefault,
kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly,
kSecAccessControlTouchIDCurrentSet,
nil);
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setObject:(__bridge id)kSecClassGenericPassword forKey:(__bridge id) kSecClass];
[dict setObject:account forKey:(__bridge id)kSecAttrAccount];
[dict setObject:service forKey:(__bridge id) kSecAttrService];
[dict setObject:token forKey:(__bridge id)kSecValueData];
...
[dict setObject:sacRef forKey:(__bridge id)kSecAttrAccessControl];
[dict setObject:@"Please authenticate using the Touch ID sensor." forKey:(__bridge id)kSecUseOperationPrompt];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
OSStatus status = SecItemAdd((__bridge CFDictionaryRef)dict, nil);
});
...
kSecAccessControlUserPresence
: タッチ ID またはパスコードでのアクセスへの制約。タッチ ID が使用可能である、または登録されている必要はありません。フィンガープリントが追加または削除された場合でも、引き続きタッチ ID でアイテムにアクセスできます。kSecAccessControlTouchIDAny
: 登録されている任意のフィンガープリントのタッチ ID でのアクセスへの制約。フィンガープリントが追加または削除された場合、アイテムは無効化されません。kSecAccessControlTouchIDCurrentSet
: 現在登録されているフィンガープリントのタッチ ID でのアクセスへの制約。フィンガープリントが追加または削除された場合、アイテムは無効化されます。kSecAccessControlTouchIDCurrentSet
属性を使用して、フィンガープリントが今後追加または削除されるのを防ぐ必要があります。kSecAccessControlTouchIDAny
制約を使用しています。
...
let flags = SecAccessControlCreateWithFlags(kCFAllocatorDefault,
kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly,
.TouchIDAny,
nil)
var query = [String : AnyObject]()
query[kSecClass as String] = kSecClassGenericPassword
query[kSecAttrService as String] = service as AnyObject?
query[kSecAttrAccount as String] = account as AnyObject?
query[kSecValueData as String] = secret as AnyObject?
...
query[kSecAttrAccessControl as String] = sacRef
query[kSecUseOperationPrompt as String] = "Please authenticate using the Touch ID sensor."
SecItemAdd(query as CFDictionary, nil)
...
<cfdump>
タグにより、配布されている Web アプリケーションにある機密情報が漏洩する可能性があります。<cfdump>
タグです。製品開発段階においては <cfdump>
の使用は許可されますが、製品版の Web アプリケーションに含まれているコードに責任を負う開発者は <cfdump>
タグの使用を許可する必要があるかどうか細心の注意を払って検討する必要があります。