security
定義がありません。security
定義がないと、攻撃者は機密性の高い API エンドポイントと対話し、特定の権限を持つ特定のユーザー アカウントに制限する必要がある操作を実行できるようになる可能性があります。security
定義の宣言を怠ります。この仕様を実装する API は、機密性の高い操作への許可されていない、または認証されていないアクセスに対して脆弱である可能性があります。
{
"openapi" : "3.0.3",
"info" : {
"title" : "My API",
"version" : "1.0.0"
},
"servers" : [ {
"url" : "https://example.org"
} ],
...
}
security
定義がありません。security
定義がないと、攻撃者は機密性の高い API エンドポイントと対話し、特定の権限を持つ特定のユーザー アカウントに制限する必要がある操作を実行できるようになる可能性があります。security
定義の宣言を怠ります。この仕様を実装する API は、機密性の高い操作への許可されていない、または認証されていないアクセスに対して脆弱である可能性があります。
openapi: 3.0.3
info:
title: My API
version: 1.0.0
...
security
定義を含みません。security
定義を含まない操作により、攻撃者は機密性の高い API エンドポイントと対話し、明示的な権限を持つ特定のユーザー アカウントに制限する必要があるアクションを実行できるようになる可能性があります。security
定義の設定に失敗します。さらに、グローバル security
定義がない場合、createUsers
操作は、許可および認証されていないアクセスに対して脆弱です。
{
"openapi": "3.0.0",
"info": {
...
},
"paths": {
"/users": {
"post": {
"summary": "Create a user",
"operationId": "createUsers",
...
}
...
}
}
security
定義を含みません。security
定義を含まない操作により、攻撃者は機密性の高い API エンドポイントと対話し、明示的な権限を持つ特定のユーザー アカウントに制限する必要があるアクションを実行できるようになる可能性があります。security
定義の設定に失敗します。さらに、グローバル security
定義がない場合、createUsers
操作は、許可および認証されていないアクセスに対して脆弱です。
openapi: 3.0.0
info:
...
paths:
/users:
post:
operationId: createUsers
responses:
'201':
...
securitySchemes
定義がありません。securitySchemes
定義は、グローバルまたは特定の API 操作で使用できるセキュリティ メカニズムを指定します。securitySchemes
定義は通常、再利用可能な components
オブジェクトの下で指定されます。また、対話のセキュリティ要件を指示するために、グローバルに、または特定の操作によって参照されます。securitySchemes
の定義に失敗します。
{
"openapi" : "3.0.3",
"info" : {
"title" : "My API",
"version" : "1.0.0"
},
"components": {
"schemas": {
"GeneralError": {
"type": "object",
"properties": {
...
}
}
}
securitySchemes
定義がありません。securitySchemes
定義は、グローバルまたは特定の API 操作で使用できるセキュリティ メカニズムを指定します。securitySchemes
定義は通常、再利用可能な components
オブジェクトの下で指定されます。また、対話のセキュリティ要件を指示するために、グローバルに、または特定の操作によって参照されます。securitySchemes
の定義に失敗します。
openapi: 3.0.3
info:
title: My API
version: 1.0.0
components:
schemas:
GeneralError:
type: object
properties:
...
security
定義内で定義されたオプションのセキュリティ要件エントリにより、攻撃者は機密性の高い API エンドポイントと対話し、特定の権限を持つ特定のユーザー アカウントに制限する必要がある操作を実行できるようになる可能性があります。{}
アイテムを介したオプションのセキュリティを設定して、グローバル security
定義を宣言します。この仕様を実装する API は、機密性の高い操作への許可されていない、または認証されていないアクセスに対して脆弱である可能性があります。
{
"openapi" : "3.0.3",
"info" : {
"title" : "My API",
"version" : "1.0.0"
},
"servers" : [ {
"url" : "/"
} ],
"security" : [ {}, { "oauth_auth" : ["write","read" ]} ],
...
}
security
定義内で定義されたオプションのセキュリティ要件エントリにより、攻撃者は機密性の高い API エンドポイントと対話し、特定の権限を持つ特定のユーザー アカウントに制限する必要がある操作を実行できるようになる可能性があります。{}
アイテムを介したオプションのセキュリティを設定して、グローバル security
定義を宣言します。この仕様を実装する API は、機密性の高い操作への許可されていない、または認証されていないアクセスに対して脆弱である可能性があります。
openapi: 3.0.3
info:
title: My API
version: 1.0.0
security:
- {}
- oauth_auth:
- write:users
- read:users
{}
を security
定義に含めることでセキュリティをオプションにします。これは、グローバルに定義されたセキュリティ要件をオーバーライドし、createUsers
操作を許可および認証されていないアクセスに対して脆弱にします。
{
"openapi": "3.0.0",
"info": {
...
},
"paths": {
"/users": {
"post": {
"security": [
{},
{
"my_auth": [
"write:users"
]
}
],
"summary": "Create a user",
"operationId": "createUsers",
...
}
...
}
}
{}
を security
定義に含めることでセキュリティをオプションにします。これは、グローバルに定義されたセキュリティ要件をオーバーライドし、createUsers
操作を許可および認証されていないアクセスに対して脆弱にします。
openapi: 3.0.0
info:
...
paths:
/users:
post:
operationId: createUsers
security:
- {}
- oauth_auth:
- write:users
- read:users
responses:
'201':
...
...
password = ''.
...
...
URLRequestDefaults.setLoginCredentialsForHost(hostname, "scott", "");
...
Example 1
のコードは、ユーザー アカウント「scott」に空のパスワードが設定されており、このパスワードが攻撃者によって簡単に推測されることを示します。プログラムが頒布された後、空ではないパスワードを使用するようにこのアカウントを更新するには、コードの変更が必要となります。
...
var storedPassword:String = "";
var temp:String;
if ((temp = readPassword()) != null) {
storedPassword = temp;
}
if(storedPassword.equals(userPassword))
// Access protected resources
...
}
...
readPassword()
が、データベースエラーやその他の問題により格納されているパスワードの取得に失敗する場合、攻撃者は、userPassword
に空の文字列を指定して、パスワードチェックを迂回する可能性があります。
...
HttpRequest req = new HttpRequest();
req.setClientCertificate('mycert', '');
...
...
NetworkCredential netCred = new NetworkCredential("scott", "", domain);
...
Example 1
のコードが正常に実行される場合、ネットワーク認証ログインである「scott」に空のパスワードが設定されており、パスワードが攻撃者によって簡単に推測されることを示します。プログラムが頒布された後、空ではないパスワードを使用するようにこのアカウントを更新するには、コードの変更が必要となります。
...
string storedPassword = "";
string temp;
if ((temp = ReadPassword(storedPassword)) != null) {
storedPassword = temp;
}
if(storedPassword.Equals(userPassword))
// Access protected resources
...
}
...
readPassword()
が、データベースエラーやその他の問題により格納されているパスワードの取得に失敗する場合、攻撃者は、userPassword
に空の文字列を指定して、パスワードチェックを迂回する可能性があります。
...
rc = SQLConnect(*hdbc, server, SQL_NTS, "scott", SQL_NTS, "", SQL_NTS);
...
Example 1
のコードが正常に実行される場合、データベース ユーザー アカウント「scott」に空のパスワードが設定されており、パスワードが攻撃者によって簡単に推測されることを示します。プログラムが頒布された後、空ではないパスワードを使用するようにこのアカウントを更新するには、コードの変更が必要となります。
...
char *stored_password = "";
readPassword(stored_password);
if(safe_strcmp(stored_password, user_password))
// Access protected resources
...
}
...
readPassword()
が、データベースエラーやその他の問題により格納されているパスワードの取得に失敗する場合、攻撃者は、user_password
に空の文字列を指定して、パスワードチェックを迂回する可能性があります。
...
<cfquery name = "GetSSNs" dataSource = "users"
username = "scott" password = "">
SELECT SSN
FROM Users
</cfquery>
...
Example 1
のコードが正常に実行される場合、データベース ユーザー アカウント「scott」に空のパスワードが設定されており、パスワードが攻撃者によって簡単に推測されることを示します。プログラムが頒布された後、空ではないパスワードを使用するようにこのアカウントを更新するには、コードの変更が必要となります。
...
var password = "";
var temp;
if ((temp = readPassword()) != null) {
password = temp;
}
if(password == userPassword()) {
// Access protected resources
...
}
...
readPassword()
が、データベースエラーやその他の問題により格納されているパスワードの取得に失敗する場合、攻撃者は、userPassword
に空の文字列を指定して、パスワード チェックを迂回する可能性があります。
...
response.SetBasicAuth(usrName, "")
...
...
DriverManager.getConnection(url, "scott", "");
...
Example 1
のコードが正常に実行される場合、データベース ユーザー アカウント「scott」に空のパスワードが設定されており、パスワードが攻撃者によって簡単に推測されることを示します。プログラムが頒布された後、空ではないパスワードを使用するようにこのアカウントを更新するには、コードの変更が必要となります。
...
String storedPassword = "";
String temp;
if ((temp = readPassword()) != null) {
storedPassword = temp;
}
if(storedPassword.equals(userPassword))
// Access protected resources
...
}
...
readPassword()
が、データベースエラーやその他の問題により格納されているパスワードの取得に失敗する場合、攻撃者は、userPassword
に空の文字列を指定して、パスワードチェックを迂回する可能性があります。
...
webview.setWebViewClient(new WebViewClient() {
public void onReceivedHttpAuthRequest(WebView view,
HttpAuthHandler handler, String host, String realm) {
String username = "";
String password = "";
if (handler.useHttpAuthUsernamePassword()) {
String[] credentials = view.getHttpAuthUsernamePassword(host, realm);
username = credentials[0];
password = credentials[1];
}
handler.proceed(username, password);
}
});
...
Example 2
と同様に、useHttpAuthUsernamePassword()
から false
が戻される場合、攻撃者は空のパスワードを送信することで保護されたページを表示できます。
...
obj = new XMLHttpRequest();
obj.open('GET','/fetchusers.jsp?id='+form.id.value,'true','scott','');
...
{
...
"password" : ""
...
}
...
rc = SQLConnect(*hdbc, server, SQL_NTS, "scott", SQL_NTS, "", SQL_NTS);
...
Example 1
のコードが正常に実行される場合、データベース ユーザー アカウント「scott」に空のパスワードが設定されており、パスワードが攻撃者によって簡単に推測されることを示します。プログラムが頒布された後、空ではないパスワードを使用するようにこのアカウントを更新するには、コードの変更が必要となります。
...
NSString *stored_password = "";
readPassword(stored_password);
if(safe_strcmp(stored_password, user_password)) {
// Access protected resources
...
}
...
readPassword()
が、データベースエラーやその他の問題により格納されているパスワードの取得に失敗する場合、攻撃者は、user_password
に空の文字列を指定して、パスワードチェックを迂回する可能性があります。
<?php
...
$connection = mysql_connect($host, 'scott', '');
...
?>
DECLARE
password VARCHAR(20);
BEGIN
password := "";
END;
...
db = mysql.connect("localhost","scott","","mydb")
...
...
conn = Mysql.new(database_host, "scott", "", databasename);
...
Example 1
のコードが正常に実行される場合、データベース ユーザー アカウント「scott」に空のパスワードが設定されており、パスワードが攻撃者によって簡単に推測されることを示します。プログラムが頒布された後、空ではないパスワードを使用するようにこのアカウントを更新するには、コードの変更が必要となります。""
が設定されている可能性があります。この場合、パスワードが必ず関数に渡されるように、正しい数の引数が指定されていることも確認する必要があります。
...
ws.url(url).withAuth("john", "", WSAuthScheme.BASIC)
...
...
let password = ""
let username = "scott"
let con = DBConnect(username, password)
...
Example 1
のコードが正常に実行される場合、データベース ユーザー アカウント「scott」に空のパスワードが設定されており、パスワードが攻撃者によって簡単に推測されることを示します。プログラムが頒布された後、空ではないパスワードを使用するようにこのアカウントを更新するには、コードの変更が必要となります。
...
var stored_password = ""
readPassword(stored_password)
if(stored_password == user_password) {
// Access protected resources
...
}
...
readPassword()
が、データベースエラーやその他の問題により格納されているパスワードの取得に失敗する場合、攻撃者は、user_password
に空の文字列を指定して、パスワードチェックを迂回する可能性があります。
...
Dim con As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim rst As New ADODB.Recordset
con.ConnectionString = "Driver={Microsoft ODBC for Oracle};Server=OracleServer.world;Uid=scott;Passwd=;"
...
Example 1
のコードが正常に実行される場合、データベース ユーザー アカウント「scott」に空のパスワードが設定されており、パスワードが攻撃者によって簡単に推測されることを示します。プログラムが頒布された後、空ではないパスワードを使用するようにこのアカウントを更新するには、コードの変更が必要となります。
...
password = 'tiger'.
...
...
URLRequestDefaults.setLoginCredentialsForHost(hostname, "scott", "tiger");
...
...
HttpRequest req = new HttpRequest();
req.setClientCertificate('mycert', 'tiger');
...
...
NetworkCredential netCred =
new NetworkCredential("scott", "tiger", domain);
...
...
rc = SQLConnect(*hdbc, server, SQL_NTS, "scott",
SQL_NTS, "tiger", SQL_NTS);
...
...
MOVE "scott" TO UID.
MOVE "tiger" TO PASSWORD.
EXEC SQL
CONNECT :UID
IDENTIFIED BY :PASSWORD
AT :MYCONN
USING :MYSERVER
END-EXEC.
...
...
<cfquery name = "GetSSNs" dataSource = "users"
username = "scott" password = "tiger">
SELECT SSN
FROM Users
</cfquery>
...
...
var password = "foobarbaz";
...
javap -c
コマンドを使用すると、使用されるパスワードの値を含んで逆アセンブルされたコードにアクセスできます。Example 1
の場合、この操作の結果は次のようになります。
javap -c ConnMngr.class
22: ldc #36; //String jdbc:mysql://ixne.com/rxsql
24: ldc #38; //String scott
26: ldc #17; //String tiger
password := "letmein"
...
response.SetBasicAuth(usrName, password)
...
DriverManager.getConnection(url, "scott", "tiger");
...
javap -c
コマンドを使って、使用パスワードの値を含んでいる逆アセンブルされたコードにアクセスできます。Example 1
の場合、この操作の結果は次のようになります。
javap -c ConnMngr.class
22: ldc #36; //String jdbc:mysql://ixne.com/rxsql
24: ldc #38; //String scott
26: ldc #17; //String tiger
...
webview.setWebViewClient(new WebViewClient() {
public void onReceivedHttpAuthRequest(WebView view,
HttpAuthHandler handler, String host, String realm) {
handler.proceed("guest", "allow");
}
});
...
Example 1
と同様に、このコードは問題なく動作しますが、コードへのアクセス権限を持つ誰もがパスワードにアクセスできます。
...
obj = new XMLHttpRequest();
obj.open('GET','/fetchusers.jsp?id='+form.id.value,'true','scott','tiger');
...
...
{
"username":"scott"
"password":"tiger"
}
...
...
DriverManager.getConnection(url, "scott", "tiger")
...
javap -c
コマンドを使用すると、使用されるパスワードの値を含んで逆アセンブルされたコードにアクセスできます。Example 1
の場合、この操作の結果は次のようになります。
javap -c ConnMngr.class
22: ldc #36; //String jdbc:mysql://ixne.com/rxsql
24: ldc #38; //String scott
26: ldc #17; //String tiger
...
webview.webViewClient = object : WebViewClient() {
override fun onReceivedHttpAuthRequest( view: WebView,
handler: HttpAuthHandler, host: String, realm: String
) {
handler.proceed("guest", "allow")
}
}
...
Example 1
と同様に、このコードは問題なく動作しますが、コードへのアクセス権限を持つ誰もがパスワードにアクセスできます。
...
rc = SQLConnect(*hdbc, server, SQL_NTS, "scott",
SQL_NTS, "tiger", SQL_NTS);
...
...
$link = mysql_connect($url, 'scott', 'tiger');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
...
DECLARE
password VARCHAR(20);
BEGIN
password := "tiger";
END;
password = "tiger"
...
response.writeln("Password:" + password)
...
Mysql.new(URI(hostname, 'scott', 'tiger', databasename)
...
...
ws.url(url).withAuth("john", "secret", WSAuthScheme.BASIC)
...
javap -c
コマンドを使って、使用パスワードの値を含んでいる逆アセンブルされたコードにアクセスできます。Example 1
の場合、この操作の結果は次のようになります。
javap -c MyController.class
24: ldc #38; //String john
26: ldc #17; //String secret
...
let password = "secret"
let username = "scott"
let con = DBConnect(username, password)
...
例 2: 次の ODBC 接続文字列は、ハードコーディングされたパスワードを使用しています。
...
https://user:secretpassword@example.com
...
...
server=Server;database=Database;UID=UserName;PWD=Password;Encrypt=yes;
...
...
Dim con As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim rst As New ADODB.Recordset
con.ConnectionString = "Driver={Microsoft ODBC for Oracle};Server=OracleServer.world;Uid=scott;Passwd=tiger;"
...
...
credential_settings:
username: scott
password: tiger
...
Null
パスワードが原因でセキュリティが危険にさらされる場合があります。null
をパスワード変数に割り当てるのは推奨されません。攻撃者がパスワード検証を迂回する可能性があり、また、リソースが空のパスワードにより保護されていることを示してしまう場合があります。null
に初期化し、格納されているパスワード値の読み取りを試行し、ユーザーが指定した値とその値を比較します。
...
var storedPassword:String = null;
var temp:String;
if ((temp = readPassword()) != null) {
storedPassword = temp;
}
if(Utils.verifyPassword(userPassword, storedPassword))
// Access protected resources
...
}
...
readPassword()
が、データベース エラーや他の問題により、格納されているパスワードの取得に失敗する場合、攻撃者は、userPassword
に null
値を指定して、パスワード チェックを簡単に迂回する可能性があります。null
をパスワード変数に割り当てるのは推奨されません。攻撃者がパスワード検証をバイパスできるようになる可能性があります。リソースが空のパスワードによって保護されていることを示してしまう可能性もあります。null
に初期化し、格納されているパスワード値の読み取りを試行し、ユーザーが指定した値とその値を比較します。
...
string storedPassword = null;
string temp;
if ((temp = ReadPassword(storedPassword)) != null) {
storedPassword = temp;
}
if (Utils.VerifyPassword(storedPassword, userPassword)) {
// Access protected resources
...
}
...
ReadPassword()
が、データベース エラーやその他の問題により格納されているパスワードの取得に失敗する場合、攻撃者は、null
値を userPassword
に指定して、パスワード チェックを容易に回避できる可能性があります。null
をパスワード変数に割り当てるのは推奨されません。攻撃者がパスワード検証を迂回する可能性があり、また、リソースが空のパスワードにより保護されていることを示してしまう場合があります。null
に初期化し、格納されているパスワード値の読み取りを試行し、ユーザーが指定した値とその値を比較します。
...
string storedPassword = null;
string temp;
if ((temp = ReadPassword(storedPassword)) != null) {
storedPassword = temp;
}
if(Utils.VerifyPassword(storedPassword, userPassword))
// Access protected resources
...
}
...
ReadPassword()
が、データベース エラーや他の問題により、格納されているパスワードの取得に失敗する場合、攻撃者は、userPassword
に null
値を指定して、パスワード チェックを簡単に迂回する可能性があります。null
をパスワード変数に割り当てるのは推奨されません。攻撃者がパスワード検証を迂回する可能性があり、また、リソースが空のパスワードにより保護されていることを示してしまう場合があります。null
に初期化し、格納されているパスワード値の読み取りを試行し、ユーザーが指定した値とその値を比較します。
...
char *stored_password = NULL;
readPassword(stored_password);
if(safe_strcmp(stored_password, user_password))
// Access protected resources
...
}
...
readPassword()
が、データベース エラーや他の問題により、格納されているパスワードの取得に失敗する場合、攻撃者は、user_password
に null
値を指定して、パスワード チェックを簡単に迂回する可能性があります。null
をパスワード変数に割り当てるのは推奨されません。攻撃者がパスワード検証をバイパスできるようになる可能性があります。リソースが空のパスワードによって保護されていることを示してしまう可能性もあります。null
をパスワード変数に割り当てるのは、よくない発想です。攻撃者がパスワード検証を迂回する可能性があり、また、リソースが空のパスワードにより保護されていることを示してしまう場合があります。null
に初期化し、格納されているパスワード値の読み取りを試行し、ユーザーが指定した値とその値を比較します。
...
String storedPassword = null;
String temp;
if ((temp = readPassword()) != null) {
storedPassword = temp;
}
if(Utils.verifyPassword(userPassword, storedPassword))
// Access protected resources
...
}
...
readPassword()
が、データベース エラーや他の問題により、格納されているパスワードの取得に失敗する場合、攻撃者は、userPassword
に null
値を指定して、パスワード チェックを簡単に迂回する可能性があります。null
に初期化し、現在のリクエストでサーバーから拒否されなかった認証情報を Android WebView store から読み取り、それらを使用して保護されたページを表示するための Authentication を設定します。
...
webview.setWebViewClient(new WebViewClient() {
public void onReceivedHttpAuthRequest(WebView view,
HttpAuthHandler handler, String host, String realm) {
String username = null;
String password = null;
if (handler.useHttpAuthUsernamePassword()) {
String[] credentials = view.getHttpAuthUsernamePassword(host, realm);
username = credentials[0];
password = credentials[1];
}
handler.proceed(username, password);
}
});
...
Example 1
と同様に、useHttpAuthUsernamePassword()
から false
が戻される場合、攻撃者は null
パスワードを送信することで保護されたページを表示できます。null
パスワードを使用するのはよくない発想です。null
に設定します。
...
var password=null;
...
{
password=getPassword(user_data);
...
}
...
if(password==null){
// Assumption that the get didn't work
...
}
...
null
を割り当てないでください。攻撃者がパスワード検証をバイパスできるようになり、リソースがパスワードで保護されていないことを示してしまう可能性があるからです。null
パスワードを初期化しています。
{
...
"password" : null
...
}
null
パスワードを使用しています。Null
パスワードが原因でセキュリティが危険にさらされる場合があります。null
をパスワード変数に割り当てるのは推奨されません。攻撃者がパスワード検証を迂回する可能性があり、また、リソースが空のパスワードにより保護されていることを示してしまう場合があります。null
に初期化し、格納されているパスワード値の読み取りを試行し、ユーザーが指定した値とその値を比較します。
...
NSString *stored_password = NULL;
readPassword(stored_password);
if(safe_strcmp(stored_password, user_password)) {
// Access protected resources
...
}
...
readPassword()
が、データベース エラーや他の問題により、格納されているパスワードの取得に失敗する場合、攻撃者は、user_password
に null
値を指定して、パスワード チェックを簡単に迂回する可能性があります。null
をパスワード変数に割り当てるのは推奨されません。攻撃者がパスワード検証を迂回する可能性があり、また、リソースが空のパスワードにより保護されていることを示してしまう場合があります。null
に初期化し、格納されているパスワード値の読み取りを試行し、ユーザーが指定した値とその値を比較します。
<?php
...
$storedPassword = NULL;
if (($temp = getPassword()) != NULL) {
$storedPassword = $temp;
}
if(strcmp($storedPassword,$userPassword) == 0) {
// Access protected resources
...
}
...
?>
readPassword()
が、データベース エラーや他の問題により、格納されているパスワードの取得に失敗する場合、攻撃者は、userPassword
に null
値を指定して、パスワード チェックを簡単に迂回する可能性があります。null
をパスワード変数に割り当てるのは推奨されません。攻撃者がパスワード検証を迂回する可能性があり、また、リソースが空のパスワードにより保護されていることを示してしまう場合があります。null
に初期化します。
DECLARE
password VARCHAR(20);
BEGIN
password := null;
END;
null
をパスワード変数に割り当てるのは推奨されません。攻撃者がパスワード検証を迂回する可能性があり、また、リソースが空のパスワードにより保護されていることを示してしまう場合があります。null
に初期化し、格納されているパスワード値の読み取りを試行し、ユーザーが指定した値とその値を比較します。
...
storedPassword = NULL;
temp = getPassword()
if (temp is not None) {
storedPassword = temp;
}
if(storedPassword == userPassword) {
// Access protected resources
...
}
...
getPassword()
が、データベース エラーや他の問題により、格納されているパスワードの取得に失敗する場合、攻撃者は、userPassword
に null
値を指定して、パスワード チェックを簡単に迂回する可能性があります。nil
をパスワード変数に割り当てるのは、よくない発想です。攻撃者がパスワード検証を迂回する可能性があり、また、リソースが空のパスワードにより保護されていることを示してしまう場合があります。nil
に初期化し、格納されているパスワード値の読み取りを試行し、ユーザーが指定した値とその値を比較します。
...
@storedPassword = nil
temp = readPassword()
storedPassword = temp unless temp.nil?
unless Utils.passwordVerified?(@userPassword, @storedPassword)
...
end
...
readPassword()
が、データベース エラーや他の問題により、格納されているパスワードの取得に失敗する場合、攻撃者は、@userPassword
に null
値を指定して、パスワード チェックを簡単に迂回する可能性があります。nil
が設定されている可能性があります。この場合、パスワードが必ず関数に渡されるように、正しい数の引数が指定されていることも確認する必要があります。null
をパスワード変数に割り当てるのは、良くない発想です。攻撃者がパスワード検証を迂回する可能性があり、また、リソースが空のパスワードにより保護されていることを示してしまう場合があります。null
に初期化し、格納されているパスワード値の読み取りを試行し、ユーザーが指定した値とその値を比較します。
...
ws.url(url).withAuth("john", null, WSAuthScheme.BASIC)
...
null
パスワードを使用しています。Null
パスワードが原因でセキュリティが危険にさらされる場合があります。nil
をパスワード変数に割り当てるのは、よくない発想です。攻撃者がパスワード検証を迂回する可能性があり、また、リソースが空のパスワードにより保護されていることを示してしまう場合があります。null
に初期化し、格納されているパスワード値の読み取りを試行し、ユーザーが指定した値とその値を比較します。
...
var stored_password = nil
readPassword(stored_password)
if(stored_password == user_password) {
// Access protected resources
...
}
...
readPassword()
が、データベース エラーや他の問題により、格納されているパスワードの取得に失敗する場合、攻撃者は、user_password
に null
値を指定して、パスワード チェックを簡単に迂回する可能性があります。null
をパスワード変数に割り当てるのは推奨されません。攻撃者がパスワード検証を迂回する可能性があり、また、リソースが空のパスワードにより保護されていることを示してしまう場合があります。null
に初期化して、そのパスワードを使用してデータベースに接続しています。
...
Dim storedPassword As String
Set storedPassword = vbNullString
Dim con As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim rst As New ADODB.Recordset
con.ConnectionString = "Driver={Microsoft ODBC for Oracle};Server=OracleServer.world;Uid=scott;Passwd=" & storedPassword &";"
...
Example 1
のコードが正常に実行される場合、データベース ユーザー アカウント「scott」に空のパスワードが設定されており、パスワードが攻撃者によって簡単に推測されることを示します。プログラムが頒布された後、空ではないパスワードを使用するようにこのアカウントを更新するには、コードの変更が必要となります。
...
* Default username for FTP connection is "scott"
* Default password for FTP connection is "tiger"
...
...
// Default username for database connection is "scott"
// Default password for database connection is "tiger"
...
...
// Default username for database connection is "scott"
// Default password for database connection is "tiger"
...
...
// Default username for database connection is "scott"
// Default password for database connection is "tiger"
...
...
// Default username for database connection is "scott"
// Default password for database connection is "tiger"
...
...
* Default username for database connection is "scott"
* Default password for database connection is "tiger"
...
...
<!-- Default username for database connection is "scott" -->
<!-- Default password for database connection is "tiger" -->
...
...
// Default username for database connection is "scott"
// Default password for database connection is "tiger"
...
...
// Default username for database connection is "scott"
// Default password for database connection is "tiger"
...
...
// Default username for database connection is "scott"
// Default password for database connection is "tiger"
...
...
// Default username for database connection is "scott"
// Default password for database connection is "tiger"
...
...
-- Default username for database connection is "scott"
-- Default password for database connection is "tiger"
...
...
# Default username for database connection is "scott"
# Default password for database connection is "tiger"
...
...
#Default username for database connection is "scott"
#Default password for database connection is "tiger"
...
...
// Default username for database connection is "scott"
// Default password for database connection is "tiger"
...
...
'Default username for database connection is "scott"
'Default password for database connection is "tiger"
...