ソフトウェアのセキュリティは、セキュリティ ソフトウェアではありません。ここでは、認証、アクセス制御、機密性、暗号化、権限管理などのトピックについて説明します。
NSURLConnection
オブジェクト、NSURLSession
オブジェクト、または NSURLDownload
オブジェクトのデリゲートの役割です。 NSURLCredential
を初期化します。
-(void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential * credential)) completionHandler {
...
[challenge.sender useCredential:[NSURLCredential credentialForTrust: challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge];
...
}
NSURLConnection
オブジェクト、NSURLSession
オブジェクト、または NSURLDownload
オブジェクトのデリゲートの役割です。 NSURLCredential
を初期化します。
func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
...
let cred = URLCredential(user: "foo", password: "bar", persistence: .none)
let trust = challenge.protectionSpace.serverTrust
let cred = URLCredential(trust:trust!)
...
}
NSURLConnection
オブジェクト、NSURLSession
オブジェクト、または NSURLDownload
オブジェクトのデリゲートの役割です。サーバー信頼を評価するには、SecTrustEvaluate(_:_:)
メソッドを呼び出す際に、サーバーの NSURLProtectionSpace
オブジェクトの serverTrust
メソッドから取得した信頼を使用します。 SecTrustEvaluate(_:_:)
メソッドは、次の 2 つの異なる値を返します。OSStatus
値は、結果コードを表します。cancel(_:)
を使用して認証チャレンジをキャンセルする必要があります。
SecTrustRef trust = [[challenge protectionSpace] serverTrust];
SecTrustResultType result = kSecTrustResultInvalid;
OSStatus status = SecTrustEvaluate(trust, &result);
completionHandler(NSURLSessionAuthChallengeUseCredential, [challenge proposedCredential]);
NSURLConnection
オブジェクト、NSURLSession
オブジェクト、または NSURLDownload
オブジェクトのデリゲートの役割です。サーバー信頼を評価するには、SecTrustEvaluate(_:_:)
メソッドを呼び出す際に、サーバーの NSURLProtectionSpace
オブジェクトの serverTrust
メソッドから取得した信頼を使用します。 SecTrustEvaluate(_:_:)
メソッドは、次の 2 つの異なる値を返します。OSStatus
値は、結果コードを表します。cancel(_:)
を使用して認証チャレンジをキャンセルする必要があります。
let trust = challenge.protectionSpace.serverTrust
var result = SecTrustResultType.invalid
let status = SecTrustEvaluate(trust!,&secresult)
completionHandler(Foundation.URLSession.AuthChallengeDisposition.useCredential, challenge.proposedCredential)
NSURLConnection
委任は、アプリケーションが特定の保護領域における認証チャレンジの処理方法を認識していることを最初に確認しないで、認証チャレンジを処理します。NSURLProtectionSpace
オブジェクトはサーバーや、一般にレルムと呼ばれる、認証を必要とするサーバー上の領域を表します。NSURLConnectionDelegate.connection(_:didReceive:)
メソッドをコールする直前に、NSURLConnectionDelegate.connection(_:canAuthenticateAgainstProtectionSpace:)
メソッドが呼び出されます。こうすることにより、NSURLConnectionDelegate
は保護領域に対して認証を行う前に、この領域を調べることができます。デリゲートは true
を返すことにより、connection(_:didReceive:)
に対する以降のコール内で行われる認証形式が処理可能なことを示します。デリゲートがこのメソッドを実装せず、保護領域でクライアント証明書認証またはサーバー信頼認証が使用される場合は、ユーザーのキーチェーンを使用して認証されますが、これが目的の動作ではない可能性があります。NSURLConnection
委任は、アプリケーションが特定の保護領域における認証チャレンジの処理方法を認識していることを最初に確認しないで、認証チャレンジを処理します。NSURLProtectionSpace
オブジェクトはサーバーや、一般にレルムと呼ばれる、認証を必要とするサーバー上の領域を表します。NSURLConnectionDelegate.connection(_:didReceive:)
メソッドをコールする直前に、NSURLConnectionDelegate.connection(_:canAuthenticateAgainstProtectionSpace:)
メソッドが呼び出されます。こうすることにより、NSURLConnectionDelegate
は保護領域に対して認証を行う前に、この領域を調べることができます。デリゲートは true
を返すことにより、connection(_:didReceive:)
に対する以降のコール内で行われる認証形式が処理可能なことを示します。デリゲートがこのメソッドを実装せず、保護領域でクライアント証明書認証またはサーバー信頼認証が使用される場合は、ユーザーのキーチェーンを使用して認証されますが、これが目的の動作ではない可能性があります。NSURLConnection
または NSURLSession
の認証処理コールバックは、認証情報の送信先ホストをチェックできません。NSURLConnection
または NSURLSession
コールバックを実装して、認証リクエストを処理します。予測されるホストから認証リクエストが届くように設定しなかった場合は、アプリケーションによってロードされたすべての URL に認証情報が送信されます。また、この認証情報を安全に送信できることをチェックしなかった場合は、認証情報が盗まれてしまいます。
- (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NS URLAuthenticationChallenge *)challenge completionHandler:(void (^)(NS URLSessionAuthChallengeDisposition, NSURLCredential *))completionHandler {
NSString *user = [self getUser];
NSString *pass = [self getPassword];
NSURLCredential *cred = [NSURLCredential credentialWithUser:user
password:pass persistence:NSURLCredentialPersistenceForSession];
completionHandler(NSURLSessionAuthChallengeUseCredential, credential);
}
NSURLConnection
または NSURLSession
の認証処理コールバックは、認証情報の送信先ホストをチェックできません。NSURLConnection
または NSURLSession
コールバックを実装して、認証リクエストを処理します。予測されるホストから認証リクエストが届くように設定しなかった場合は、アプリケーションによってロードされたすべての URL に認証情報が送信されます。また、この認証情報を安全に送信できることをチェックしなかった場合は、認証情報が盗まれてしまいます。
func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
let user = getUser()
let pass = getPassword()
let credential = URLCredential(user: user, password: pass, persistence: .none)
completionHandler(Foundation.URLSession.AuthChallengeDisposition.useCredential, credential)
}
tx.origin
を認可目的で使用しています。tx.origin
グローバル変数は、トランザクションを開始したアカウントのアドレスが保持されています。tx.origin
には、S1 を呼び出すために使用されるアカウント A1 のアドレスが含まれています。tx.origin
の目的が A1 の認可を確認することである場合、この認可はバイパスされます。tx.origin
を介して認可されている脆弱なコントラクトを呼び出すことができる場合、tx.origin
はトランザクションを開始したユーザー アカウントのアドレスを保持するため、認可はバイパスされます。tx.origin
と同じであることを求めます。sendTo
関数を即座に呼び出す悪意のあるコントラクトにトランザクションを送信させることができる場合、require
ステートメント内の条件は true になり、sendTo
を呼び出すと、攻撃者のコントラクトが指定したアドレスに資金が転送されます。
function sendTo(address receiver, uint amount) public {
require(tx.origin == owner);
receiver.transfer(amount);
}
0.0.0.0/0
) に対して TCP ポート 22
を開く AWS セキュリティ グループを定義します。SSH サーバーは通常、受信接続リクエストに応答します。
- name: Task to open SSH port
amazon.aws.ec2_group:
name: demo_security_group
description: Open the ssh port to the world
state: present
vpc_id: 123456
region: us-west-1
rules:
- proto: tcp
ports: 22
cidr_ip: 0.0.0.0/0
- name: Create Lambda policy statement for S3 event notification
community.aws.lambda_policy:
action: lambda:InvokeFunction
function_name: functionName
principal: *
statement_id: lambda-s3-demobucket-access-log
source_arn: arn:aws:s3:us-west-2:123456789012:demobucket
source_account: 123456789012
state: present