services-config.xml
especificar谩 um elemento XML "Logging" para descrever v谩rios aspectos desse registro. Parece o seguinte:
<logging>
<target class="flex.messaging.log.ConsoleTarget" level="Debug">
<properties>
<prefix>[BlazeDS]</prefix>
<includeDate>false</includeDate>
<includeTime>false</includeTime>
<includeLevel>false</includeLevel>
<includeCategory>false</includeCategory>
</properties>
<filters>
<pattern>Endpoint.*</pattern>
<pattern>Service.*</pattern>
<pattern>Configuration</pattern>
</filters>
</target>
</logging>
target
usa um atributo opcional denominado level
, que indica o n铆vel de log. Se o n铆vel de depura莽茫o for definido com um n铆vel muito detalhado, seu aplicativo pode gravar dados confidenciais no arquivo de log.allowBackup
como true
(o valor padr茫o) e definindo o atributo backupAgent
na tag do <application>
.Environment.getExternalStorageDirectory()
retorna uma refer锚ncia ao armazenamento externo do dispositivo Android.private void WriteToFile(String what_to_write) {
try{
File root = Environment.getExternalStorageDirectory();
if(root.canWrite()) {
File dir = new File(root + "write_to_the_SDcard");
File datafile = new File(dir, number + ".extension");
FileWriter datawriter = new FileWriter(datafile);
BufferedWriter out = new BufferedWriter(datawriter);
out.write(what_to_write);
out.close();
}
}
}
kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly
:kSecAttrAccessibleAlways
:kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly
:kSecAttrAccessibleAlwaysThisDeviceOnly
:kSecAttrAccessibleWhenUnlocked
:kSecAttrAccessibleWhenUnlockedThisDeviceOnly
:ThisDeviceOnly
ser茫o armazenados em backup no iCloud e no iTunes, mesmo se voc锚 estiver usando backups n茫o criptografados que podem ser restaurados para qualquer dispositivo. Dependendo de qu茫o confidenciais e privados os dados armazenados s茫o, isso pode gerar uma preocupa莽茫o de privacidade.
...
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
NSData *token = [@"secret" dataUsingEncoding:NSUTF8StringEncoding];
// Configure KeyChain Item
[dict setObject:(__bridge id)kSecClassGenericPassword forKey:(__bridge id) kSecClass];
[dict setObject:token forKey:(__bridge id)kSecValueData];
...
[dict setObject:(__bridge id)kSecAttrAccessibleWhenUnlocked forKey:(__bridge id) kSecAttrAccessible];
OSStatus error = SecItemAdd((__bridge CFDictionaryRef)dict, NULL);
...
kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly
:kSecAttrAccessibleAlways
:kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly
:kSecAttrAccessibleAlwaysThisDeviceOnly
:kSecAttrAccessibleWhenUnlocked
:kSecAttrAccessibleWhenUnlockedThisDeviceOnly
:ThisDeviceOnly
ser茫o armazenados em backup no iCloud e no iTunes, mesmo se voc锚 estiver usando backups n茫o criptografados que podem ser restaurados para qualquer dispositivo. Dependendo de qu茫o confidenciais e privados os dados armazenados s茫o, isso pode gerar uma preocupa莽茫o de privacidade.
...
// Configure KeyChain Item
let token = "secret"
var query = [String : AnyObject]()
query[kSecClass as String] = kSecClassGenericPassword
query[kSecValueData as String] = token as AnyObject?
...
query[kSecAttrAccessible as String] = kSecAttrAccessibleWhenUnlocked
SecItemAdd(query as CFDictionary, nil)
...
protected void onCreate(Bundle savedInstanceState) {
...
try {
File httpCacheDir = new File(context.getExternalCacheDir(), "http");
long httpCacheSize = 10 * 1024 * 1024; // 10 MiB
HttpResponseCache.install(httpCacheDir, httpCacheSize);
} catch (IOException e) {
Log.i(TAG, "HTTP response cache installation failed:" + e);
}
}
protected void onStop() {
...
HttpResponseCache cache = HttpResponseCache.getInstalled();
if (cache != null) {
cache.flush();
}
}
{app ID}/Library/Caches/com.mycompany.myapp/Cache.db*
.{app ID}/Library/Caches/com.mycompany.myapp/Cache.db*
.{app ID}/Library/Caches/com.mycompany.myapp/Cache.db*
. diskCapacity
ou memoryCapacity
da classe URLCache
como 0, eles podem estar desabilitando efetivamente o sistema de cache de respostas HTTP(S). No entanto, a documenta莽茫o de NSURLCache
indica que os caches no disco e na mem贸ria ser茫o truncados para os tamanhos configurados somente se o dispositivo estiver sendo executado com pouca mem贸ria ou pouco espa莽o em disco. Ambas as configura莽玫es s茫o usadas pelo sistema para liberar recursos do sistema e melhorar o desempenho, n茫o como um controle de seguran莽a.{app ID}/Library/Caches/com.mycompany.myapp/Cache.db*
. diskCapacity
ou memoryCapacity
da classe URLCache
como 0, eles podem estar desabilitando efetivamente o sistema de cache de respostas HTTP(S). No entanto, a documenta莽茫o de NSURLCache
indica que os caches no disco e na mem贸ria ser茫o truncados para os tamanhos configurados somente se o dispositivo estiver sendo executado com pouca mem贸ria ou pouco espa莽o em disco. Ambas as configura莽玫es s茫o usadas pelo sistema para liberar recursos do sistema e melhorar o desempenho, n茫o como um controle de seguran莽a.NSFileManager
como constantes que devem ser atribu铆das como o valor da chave NSFileProtectionKey
em um NSDictionary
associado 脿 inst芒ncia do NSFileManager
, e os arquivos podem ser criados ou a classe de prote莽茫o de dados deles pode ser modificada por meio da utiliza莽茫o das fun莽玫es do NSFileManager
, incluindo setAttributes:ofItemAtPath:error:
, attributesOfItemAtPath:error:
e createFileAtPath:contents:attributes:
. Al茅m disso, as constantes correspondentes de Prote莽茫o de dados s茫o definidas para objetos NSData
como NSDataWritingOptions
que podem ser transmitidas como o argumento options
para as fun莽玫es NSData
writeToURL:options:error:
e writeToFile:options:error:
. As defini莽玫es para as diversas constantes de classe de Prote莽茫o de dados do NSFileManager
e do NSData
s茫o as seguintes:NSFileProtectionComplete
, NSDataWritingFileProtectionComplete
:NSFileProtectionCompleteUnlessOpen
, NSDataWritingFileProtectionCompleteUnlessOpen
:NSFileProtectionCompleteUntilFirstUserAuthentication
, NSDataWritingFileProtectionCompleteUntilFirstUserAuthentication
:NSFileProtectionNone
, NSDataWritingFileProtectionNone
:NSFileProtectionCompleteUnlessOpen
ou NSFileProtectionCompleteUntilFirstUserAuthentication
garantir谩 a encripta莽茫o deles por meio de uma chave derivada da senha do usu谩rio e do UID do dispositivo, os dados ainda permanecer茫o acess铆veis sob certas circunst芒ncias. Como tal, os usos de NSFileProtectionCompleteUnlessOpen
ou NSFileProtectionCompleteUntilFirstUserAuthentication
devem ser estudados cautelosamente para determinar se uma prote莽茫o aprofundada com o NSFileProtectionComplete
茅 garantida.Exemplo 2: Neste exemplo, os dados s贸 est茫o protegidos at茅 que o usu谩rio ligue o dispositivo e digite a senha pela primeira vez (at茅 a pr贸xima reinicializa莽茫o):
...
filepath = [self.GetDocumentDirectory stringByAppendingPathComponent:self.setFilename];
...
NSDictionary *protection = [NSDictionary dictionaryWithObject:NSFileProtectionCompleteUntilFirstUserAuthentication forKey:NSFileProtectionKey];
...
[[NSFileManager defaultManager] setAttributes:protection ofItemAtPath:filepath error:nil];
...
BOOL ok = [testToWrite writeToFile:filepath atomically:YES encoding:NSUnicodeStringEncoding error:&err];
...
...
filepath = [self.GetDocumentDirectory stringByAppendingPathComponent:self.setFilename];
...
NSData *textData = [textToWrite dataUsingEncoding:NSUnicodeStingEncoding];
...
BOOL ok = [textData writeToFile:filepath options:NSDataWritingFileProtectionCompleteUntilFirstUserAuthentication error:&err];
...
NSFileManager
como constantes que devem ser atribu铆das como o valor da chave NSFileProtectionKey
em um Dictionary
associado 脿 inst芒ncia do NSFileManager
, e os arquivos podem ser criados ou a classe de prote莽茫o de dados deles pode ser modificada por meio da utiliza莽茫o das fun莽玫es NSFileManager
, incluindo setAttributes(_:ofItemAtPath:)
, attributesOfItemAtPath(_:)
e createFileAtPath(_:contents:attributes:)
. Al茅m disso, as constantes correspondentes de Prote莽茫o de dados s茫o definidas para objetos NSData
na enumera莽茫o NSDataWritingOptions
que podem ser transmitidas como o argumento options
para as fun莽玫es NSData
writeToFile(_:options:)
. As defini莽玫es para as diversas constantes de classe de Prote莽茫o de dados do NSFileManager
e do NSData
s茫o as seguintes:NSFileProtectionComplete
, NSDataWritingOptions.DataWritingFileProtectionComplete
:NSFileProtectionCompleteUnlessOpen
, NSDataWritingOptions.DataWritingFileProtectionCompleteUnlessOpen
:NSFileProtectionCompleteUntilFirstUserAuthentication
, NSDataWritingOptions.DataWritingFileProtectionCompleteUntilFirstUserAuthentication
:NSFileProtectionNone
, NSDataWritingOptions.DataWritingFileProtectionNone
:NSFileProtectionCompleteUnlessOpen
ou NSFileProtectionCompleteUntilFirstUserAuthentication
garantir谩 a encripta莽茫o deles por meio de uma chave derivada da senha do usu谩rio e do UID do dispositivo, os dados ainda permanecer茫o acess铆veis sob certas circunst芒ncias. Como tal, os usos de NSFileProtectionCompleteUnlessOpen
ou NSFileProtectionCompleteUntilFirstUserAuthentication
devem ser estudados cautelosamente para determinar se uma prote莽茫o aprofundada com o NSFileProtectionComplete
茅 garantida.Exemplo 2: Neste exemplo, os dados s贸 est茫o protegidos at茅 que o usu谩rio ligue o dispositivo e digite a senha pela primeira vez (at茅 a pr贸xima reinicializa莽茫o):
...
let documentsPath = NSURL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0])
let filename = "\(documentsPath)/tmp_activeTrans.txt"
let protection = [NSFileProtectionKey: NSFileProtectionCompleteUntilFirstUserAuthentication]
do {
try NSFileManager.defaultManager().setAttributes(protection, ofItemAtPath: filename)
} catch let error as NSError {
NSLog("Unable to change attributes: \(error.debugDescription)")
}
...
BOOL ok = textToWrite.writeToFile(filename, atomically:true)
...
...
let documentsPath = NSURL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0])
let filename = "\(documentsPath)/tmp_activeTrans.txt"
...
BOOL ok = textData.writeToFile(filepath, options: .DataWritingFileProtectionCompleteUntilFirstUserAuthentication);
...
kSecAttrAccessible
no dicion谩rio de atributos do conjunto de chaves. As defini莽玫es das diversas constantes de acessibilidade do conjunto de chaves s茫o as seguintes:kSecAttrAccessibleAfterFirstUnlock
:kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly
:kSecAttrAccessibleAlways
:kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly
:kSecAttrAccessibleAlwaysThisDeviceOnly
:kSecAttrAccessibleWhenUnlocked
:kSecAttrAccessibleWhenUnlockedThisDeviceOnly
:kSecAttrAccessibleAfterFirstUnlock
garantir谩 criptograf谩-lo por meio de uma chave derivada da senha do usu谩rio e do UID do dispositivo, os dados ainda permanecer茫o acess铆veis sob certas circunst芒ncias. Como tal, os usos de kSecAttrAccessibleAfterFirstUnlock
devem ser estudados cautelosamente para determinar se uma prote莽茫o aprofundada 茅 garantida.
...
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
NSData *token = [@"secret" dataUsingEncoding:NSUTF8StringEncoding];
// Configure KeyChain Item
[dict setObject:(__bridge id)kSecClassGenericPassword forKey:(__bridge id) kSecClass];
[dict setObject:token forKey:(__bridge id)kSecValueData];
...
[dict setObject:(__bridge id)kSecAttrAccessibleAfterFirstUnlock forKey:(__bridge id) kSecAttrAccessible];
OSStatus error = SecItemAdd((__bridge CFDictionaryRef)dict, NULL);
...
kSecAttrAccessible
no dicion谩rio de atributos do conjunto de chaves. As defini莽玫es das diversas constantes de acessibilidade do conjunto de chaves s茫o as seguintes:kSecAttrAccessibleAfterFirstUnlock
:kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly
:kSecAttrAccessibleAlways
:kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly
:kSecAttrAccessibleAlwaysThisDeviceOnly
:kSecAttrAccessibleWhenUnlocked
:kSecAttrAccessibleWhenUnlockedThisDeviceOnly
:kSecAttrAccessibleAfterFirstUnlock
garantir谩 criptograf谩-lo por meio de uma chave derivada da senha do usu谩rio e do UID do dispositivo, os dados ainda permanecer茫o acess铆veis sob certas circunst芒ncias. Como tal, os usos de kSecAttrAccessibleAfterFirstUnlock
devem ser estudados cautelosamente para determinar se uma prote莽茫o aprofundada 茅 garantida.
...
// Configure KeyChain Item
let token = "secret"
var query = [String : AnyObject]()
query[kSecClass as String] = kSecClassGenericPassword
query[kSecValueData as String] = token as AnyObject?
...
query[kSecAttrAccessible as String] = kSecAttrAccessibleAfterFirstUnlock
SecItemAdd(query as CFDictionary, nil)
...
NSFileManager
como constantes que devem ser atribu铆das como o valor da chave NSFileProtectionKey
em um NSDictionary
associado 脿 inst芒ncia do NSFileManager
, e os arquivos podem ser criados ou a classe de prote莽茫o de dados deles pode ser modificada por meio da utiliza莽茫o das fun莽玫es do NSFileManager
, incluindo setAttributes:ofItemAtPath:error:
, attributesOfItemAtPath:error:
e createFileAtPath:contents:attributes:
. Al茅m disso, as constantes correspondentes de Prote莽茫o de dados s茫o definidas para objetos NSData
como NSDataWritingOptions
que podem ser transmitidas como o argumento options
para as fun莽玫es NSData
writeToURL:options:error:
e writeToFile:options:error:
. As defini莽玫es para as diversas constantes de classe de Prote莽茫o de dados do NSFileManager
e do NSData
s茫o as seguintes:NSFileProtectionComplete
, NSDataWritingFileProtectionComplete
:NSFileProtectionCompleteUnlessOpen
, NSDataWritingFileProtectionCompleteUnlessOpen
:NSFileProtectionCompleteUntilFirstUserAuthentication
, NSDataWritingFileProtectionCompleteUntilFirstUserAuthentication
:NSFileProtectionNone
, NSDataWritingFileProtectionNone
:NSFileProtectionNone
na criptografia utilizando uma chave derivada unicamente baseada no UID do dispositivo. Isso faz com que esses arquivos sejam acess铆veis a qualquer momento em que o dispositivo estiver ligado, mesmo quando est谩 iniciando ou bloqueado com uma senha. Como tal, os usos da NSFileProtectionNone
devem ser estudados cautelosamente para determinar se uma prote莽茫o aprofundada com uma classe mais rigorosa de Prote莽茫o de dados 茅 garantida.Exemplo 2: Neste exemplo, os dados n茫o est茫o protegidos (s茫o acess铆veis a qualquer momento em que o dispositivo estiver ligado):
...
filepath = [self.GetDocumentDirectory stringByAppendingPathComponent:self.setFilename];
...
NSDictionary *protection = [NSDictionary dictionaryWithObject:NSFileProtectionNone forKey:NSFileProtectionKey];
...
[[NSFileManager defaultManager] setAttributes:protection ofItemAtPath:filepath error:nil];
...
BOOL ok = [testToWrite writeToFile:filepath atomically:YES encoding:NSUnicodeStringEncoding error:&err];
...
...
filepath = [self.GetDocumentDirectory stringByAppendingPathComponent:self.setFilename];
...
NSData *textData = [textToWrite dataUsingEncoding:NSUnicodeStingEncoding];
...
BOOL ok = [textData writeToFile:filepath options:NSDataWritingFileProtectionNone error:&err];
...
NSFileManager
como constantes que devem ser atribu铆das como o valor da chave NSFileProtectionKey
em um Dictionary
associado 脿 inst芒ncia do NSFileManager
. Os arquivos podem ser criados ou a classe de prote莽茫o de dados deles pode ser modificada por meio da utiliza莽茫o das fun莽玫es do NSFileManager
, incluindo setAttributes(_:ofItemAtPath:)
, attributesOfItemAtPath(_:)
e createFileAtPath(_:contents:attributes:)
. Al茅m disso, as constantes correspondentes de Prote莽茫o de dados s茫o definidas para objetos NSData
na enumera莽茫o NSDataWritingOptions
que podem ser transmitidas como o argumento options
para as fun莽玫es NSData
como
writeToFile(_:options:)
. As defini莽玫es para as diversas constantes de classe de Prote莽茫o de dados do NSFileManager
e do NSData
s茫o as seguintes:NSFileProtectionComplete
, NSDataWritingOptions.DataWritingFileProtectionComplete
:NSFileProtectionCompleteUnlessOpen
, NSDataWritingOptions.DataWritingFileProtectionCompleteUnlessOpen
:NSFileProtectionCompleteUntilFirstUserAuthentication
, NSDataWritingOptions.DataWritingFileProtectionCompleteUntilFirstUserAuthentication
:NSFileProtectionNone
, NSDataWritingOptions.DataWritingFileProtectionNone
:NSFileProtectionNone
na criptografia utilizando uma chave derivada unicamente baseada no UID do dispositivo. Isso faz com que esses arquivos sejam acess铆veis a qualquer momento em que o dispositivo estiver ligado, mesmo quando est谩 iniciando ou bloqueado com uma senha. Como tal, os usos da NSFileProtectionNone
devem ser estudados cautelosamente para determinar se uma prote莽茫o aprofundada com uma classe mais rigorosa de Prote莽茫o de dados 茅 garantida.Exemplo 2: Neste exemplo, os dados n茫o est茫o protegidos (s茫o acess铆veis a qualquer momento em que o dispositivo estiver ligado):
...
let documentsPath = NSURL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0])
let filename = "\(documentsPath)/tmp_activeTrans.txt"
let protection = [NSFileProtectionKey: NSFileProtectionNone]
do {
try NSFileManager.defaultManager().setAttributes(protection, ofItemAtPath: filename)
} catch let error as NSError {
NSLog("Unable to change attributes: \(error.debugDescription)")
}
...
BOOL ok = textToWrite.writeToFile(filename, atomically:true)
...
...
let documentsPath = NSURL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0])
let filename = "\(documentsPath)/tmp_activeTrans.txt"
...
BOOL ok = textData.writeToFile(filepath, options: .DataWritingFileProtectionNone);
...
kSecAttrAccessible
no dicion谩rio de atributos do conjunto de chaves. As defini莽玫es das diversas constantes de acessibilidade do conjunto de chaves s茫o as seguintes:kSecAttrAccessibleAfterFirstUnlock
:kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly
:kSecAttrAccessibleAlways
:kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly
:kSecAttrAccessibleAlwaysThisDeviceOnly
:kSecAttrAccessibleWhenUnlocked
:kSecAttrAccessibleWhenUnlockedThisDeviceOnly
:kSecAttrAccessibleAlways
resulta no uso de uma chave derivada unicamente baseada no UID do dispositivo pela criptografia. Isso faz com que esses arquivos sejam acess铆veis a qualquer momento em que o dispositivo estiver ligado, mesmo quando est谩 iniciando ou bloqueado com uma senha. Como tal, os usos de kSecAttrAccessibleAlways
dever茫o ser estudados cautelosamente para determinar se uma prote莽茫o aprofundada com um n铆vel de acessibilidade de conjunto de chaves mais rigoroso 茅 garantida.
...
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
NSData *token = [@"secret" dataUsingEncoding:NSUTF8StringEncoding];
// Configure KeyChain Item
[dict setObject:(__bridge id)kSecClassGenericPassword forKey:(__bridge id) kSecClass];
[dict setObject:token forKey:(__bridge id)kSecValueData];
...
[dict setObject:(__bridge id)kSecAttrAccessibleAlways forKey:(__bridge id) kSecAttrAccessible];
OSStatus error = SecItemAdd((__bridge CFDictionaryRef)dict, NULL);
...
kSecAttrAccessible
no dicion谩rio de atributos do conjunto de chaves. As defini莽玫es das diversas constantes de acessibilidade do conjunto de chaves s茫o as seguintes:kSecAttrAccessibleAfterFirstUnlock
:kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly
:kSecAttrAccessibleAlways
:kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly
:kSecAttrAccessibleAlwaysThisDeviceOnly
:kSecAttrAccessibleWhenUnlocked
:kSecAttrAccessibleWhenUnlockedThisDeviceOnly
:kSecAttrAccessibleAlways
resulta no uso de uma chave derivada unicamente baseada no UID do dispositivo pela criptografia. Isso faz com que esses arquivos sejam acess铆veis a qualquer momento em que o dispositivo estiver ligado, mesmo quando est谩 iniciando ou bloqueado com uma senha. Como tal, os usos de kSecAttrAccessibleAlways
dever茫o ser estudados cautelosamente para determinar se uma prote莽茫o aprofundada com um n铆vel de acessibilidade de conjunto de chaves mais rigoroso 茅 garantida.
...
// Configure KeyChain Item
let token = "secret"
var query = [String : AnyObject]()
query[kSecClass as String] = kSecClassGenericPassword
query[kSecValueData as String] = token as AnyObject?
...
query[kSecAttrAccessible as String] = kSecAttrAccessibleAlways
SecItemAdd(query as CFDictionary, nil)
...
Realm
n茫o criptografado:
Realm realm = Realm.getDefaultInstance();
Realm
n茫o criptografado:
RLMRealmConfiguration *config = [RLMRealmConfiguration defaultConfiguration];
RLMRealm *realm = [RLMRealm realmWithConfiguration:config error:nil];
Realm
n茫o criptografado:
let realm = try! Realm()
UIImageWriteToSavedPhotosAlbum
para salvar imagens no 谩lbum de fotos:
- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
// Access the uncropped image from info dictionary
UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
// Save image
UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
...
}
UIImageWriteToSavedPhotosAlbum
para salvar imagens no 谩lbum de fotos:
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {
if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
imageView.contentMode = .ScaleAspectFit
imageView.image = pickedImage
}
// Save image
UIImageWriteToSavedPhotosAlbum(pickedImage!, self, nil, nil)
dismissViewControllerAnimated(true, completion: nil)
}
kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly
:kSecAttrAccessibleAlways
:kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly
:kSecAttrAccessibleAlwaysThisDeviceOnly
:kSecAttrAccessibleWhenUnlocked
:kSecAttrAccessibleWhenUnlockedThisDeviceOnly
:kSecAttrAccessibleWhenUnlocked
, se o dispositivo for roubado e uma senha for definida, o roubo precisar谩 desbloquear o dispositivo para que os itens de conjunto de chaves sejam descriptografados. A falha ao digitar a senha correta bloquear谩 a descriptografia dos itens de conjunto de chaves do roubo. No entanto, se a senha n茫o estiver definida, o invasor s贸 precisar谩 deslizar o dedo para desbloquear o dispositivo e obter o conjunto de chaves para descriptografar os itens. Portanto, a falha ao aplicar uma senha no dispositivo pode enfraquecer o mecanismo de criptografia do conjunto de chaves.
...
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
NSData *token = [@"secret" dataUsingEncoding:NSUTF8StringEncoding];
// Configure KeyChain Item
[dict setObject:(__bridge id)kSecClassGenericPassword forKey:(__bridge id) kSecClass];
[dict setObject:token forKey:(__bridge id)kSecValueData];
...
[dict setObject:(__bridge id)kSecAttrAccessibleWhenUnlockedThisDeviceOnly forKey:(__bridge id) kSecAttrAccessible];
OSStatus error = SecItemAdd((__bridge CFDictionaryRef)dict, NULL);
...
kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly
:kSecAttrAccessibleAlways
:kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly
:kSecAttrAccessibleAlwaysThisDeviceOnly
:kSecAttrAccessibleWhenUnlocked
:kSecAttrAccessibleWhenUnlockedThisDeviceOnly
:kSecAttrAccessibleWhenUnlocked
, se o dispositivo for roubado e uma senha for definida, o roubo precisar谩 desbloquear o dispositivo para que os itens de conjunto de chaves sejam descriptografados. A falha ao digitar a senha correta bloquear谩 a descriptografia dos itens de conjunto de chaves do roubo. No entanto, se a senha n茫o estiver definida, o invasor s贸 precisar谩 deslizar o dedo para desbloquear o dispositivo e obter o conjunto de chaves para descriptografar os itens. Portanto, a falha ao aplicar uma senha no dispositivo pode enfraquecer o mecanismo de criptografia do conjunto de chaves.
...
// Configure KeyChain Item
let token = "secret"
var query = [String : AnyObject]()
query[kSecClass as String] = kSecClassGenericPassword
query[kSecValueData as String] = token as AnyObject?
...
query[kSecAttrAccessible as String] = kSecAttrAccessibleWhenUnlockedThisDeviceOnly
SecItemAdd(query as CFDictionary, nil)
...
setPersistent:YES
.
...
UIPasteboard *pasteboard = [UIPasteboard pasteboardWithName:@"myPasteboard" create:YES];
[pasteboard setPersistent:YES];
...
setPersistent(true)
.
...
let pasteboard = UIPasteboard(name: UIPasteboard.Name(rawValue: "myPasteboard"), create: true)!
pasteboard.setPersistent(true)
...
Access Control Policy
que concede acesso an么nimo completo ao bucket foo
.
GetBucketAclRequest bucketAclReq = GetBucketAclRequest.builder().bucket("foo").build();
GetBucketAclResponse getAclRes = s3.getBucketAcl(bucketAclReq);
List<Grant> grants = getAclRes.grants();
Grantee allusers = Grantee.builder().uri("http://acs.amazonaws.com/groups/global/AllUsers").build();
Permission fc_permission = Permission.fromValue("FullControl");
Grant grant = Grant.builder().grantee(allusers).permission(fc_permission).build();
grants.add(grant);
AccessControlPolicy acl = AccessControlPolicy.builder().grants(grants).build();
Access Control Policy
que concede acesso ACP de grava莽茫o an么nimo ao bucket foo
.
GetBucketAclRequest bucketAclReq = GetBucketAclRequest.builder().bucket("foo").build();
GetBucketAclResponse getAclRes = s3.getBucketAcl(bucketAclReq);
List<Grant> grants = getAclRes.grants();
Grantee allusers = Grantee.builder().uri("http://acs.amazonaws.com/groups/global/AllUsers").build();
Permission fc_permission = Permission.fromValue("READ_ACP");
Grant grant = Grant.builder().grantee(allusers).permission(fc_permission).build();
grants.add(grant);
AccessControlPolicy acl = AccessControlPolicy.builder().grants(grants).build();
Access Control Policy
que concede acesso de leitura an么nimo ao bucket foo
.
GetBucketAclRequest bucketAclReq = GetBucketAclRequest.builder().bucket("foo").build();
GetBucketAclResponse getAclRes = s3.getBucketAcl(bucketAclReq);
List<Grant> grants = getAclRes.grants();
Grantee allusers = Grantee.builder().uri("http://acs.amazonaws.com/groups/global/AllUsers").build();
Permission fc_permission = Permission.fromValue("Read");
Grant grant = Grant.builder().grantee(allusers).permission(fc_permission).build();
grants.add(grant);
AccessControlPolicy acl = AccessControlPolicy.builder().grants(grants).build();
Access Control Policy
que concede acesso ACP de grava莽茫o an么nimo ao bucket foo
.
GetBucketAclRequest bucketAclReq = GetBucketAclRequest.builder().bucket("foo").build();
GetBucketAclResponse getAclRes = s3.getBucketAcl(bucketAclReq);
List<Grant> grants = getAclRes.grants();
Grantee allusers = Grantee.builder().uri("http://acs.amazonaws.com/groups/global/AllUsers").build();
Permission fc_permission = Permission.fromValue("WRITE_ACP");
Grant grant = Grant.builder().grantee(allusers).permission(fc_permission).build();
grants.add(grant);
AccessControlPolicy acl = AccessControlPolicy.builder().grants(grants).build();