CWE Rule 489
説明
ルールの説明
The application is deployed to unauthorized actors with debugging code still enabled or active, which can create unintended entry points or expose sensitive information.
Polyspace 実装
このルール チェッカーは、[禁止された関数の使用] をチェックします。
例
この問題は、禁止された関数のブロックリストに追加されている関数を使用した場合に発生します。ブロックリストを作成するには、次のようにします。
特定の構文で XML ファイル内の関数を列挙します。
テンプレート ファイル
code-behavior-specifications-template.xml
をフォルダー
から書き込み可能な場所にコピーし、そのファイルを変更します。以下の構文を使用して、ファイル内の各関数を既存の同様のエントリの後ろに入力します。polyspaceroot
\polyspace\verifier\cxxここで、<function name="funcname"> <behavior name="FORBIDDEN_FUNC"/> </function>
は、ブロックリストに追加する関数の名前です。funcname
この XML ファイルをオプション
[-code-behavior-specifications]
の引数として指定します。Bug Finder チェッカーを使用した非推奨の関数または安全でない関数、キーワード、またはマクロのフラグ設定を参照してください。
関数は、以下のいずれかの理由でブロックリストに追加されます。
その関数により動作が未定義のさまざまな状況が発生し、セキュリティの脆弱性につながる可能性があり、より安全な別の関数が存在している。
[危険な標準関数を使用しています]
や[旧式の標準関数が使用されています]
などの既存のチェッカーによって明示的にチェックされない関数を禁止できます。関数が、C++98 から C++11 へなどの移行の一環として非推奨になっている。
移行の一環として、置き換える必要がある関数のリストを作成し、このチェッカーを使用してそれらの使い方を特定できます。
ブロックリストに登録されている関数を、許可リストに登録されている関数に置き換えます。
このチェッカーをグループ、プロジェクト、または組織に公開する場合は、ブロックリストに登録されてる関数とその代替関数のリストを作成し、結果のレビュー担当者がそのリストを参照して適切な置き換えができるようにします。
この欠陥チェッカーには、関数のブロックリストを指定する必要があります。オプション [欠陥の検出] (-checkers)
を使用してチェッカーを指定しても、ブロックリストも指定しなければ、チェッカーは有効になりません。Bug Finder チェッカーを使用した非推奨の関数または安全でない関数、キーワード、またはマクロのフラグ設定を参照してください。
#include <csignal>
#include <iostream>
namespace
{
volatile std::sig_atomic_t gSignalStatus;
}
void signal_handler(int signal)
{
gSignalStatus = signal;
}
int main()
{
// Install a signal handler
std::signal(SIGINT, signal_handler); //Noncompliant
std::cout << "SignalValue: " << gSignalStatus << '\n';
std::cout << "Sending signal " << SIGINT << '\n';
std::raise(SIGINT);
std::cout << "SignalValue: " << gSignalStatus << '\n';
}
関数 std::signal
を非推奨にする場合を考えます。次のコード動作仕様を XML 形式で定義します。
<?xml version="1.0" encoding="UTF-8"?>
<specifications xmlns="http://www.mathworks.com/PolyspaceCodeBehaviorSpecifications">
<functions>
<function name="std::signal">
<behavior name="FORBIDDEN_FUNC"/>
</function>
</functions>
</specifications>
-code-behavior-specifications
を使用して XML ファイルを指定します。解析結果では、関数 std::signal
のすべての使用にこのチェッカーによるフラグが設定されます。
class orderedPair {
int var1;
int var2;
public:
orderedPair() {
var1 = 0;
var2 = 0;
}
orderedPair(int arg1, int arg2) {
var1 = arg1;
var2 = arg2;
}
orderedPair& operator=(const orderedPair& rhs) {
var1 = rhs.var1;
var2 = rhs.var2;
return *this;
}
orderedPair& operator+(orderedPair& rhs) {
var1 += rhs.var1;
var2 += rhs.var2;
return *this;
}
};
void main() {
int one=1, zero=0, sum;
orderedPair firstOrderedPair(one, one);
orderedPair secondOrderedPair(zero, one);
orderedPair sumPair;
sum = zero + one;
sumPair = firstOrderedPair + secondOrderedPair; //Noncompliant
}
orderedPair
クラス内で演算子のオーバーロードが使用されているすべての場所を特定する場合を考えます。オーバーロードされた演算子をテンプレート XML ファイルに追加し、
<?xml version="1.0" encoding="UTF-8"?>
<specifications xmlns="http://www.mathworks.com/PolyspaceCodeBehaviorSpecifications">
<functions>
<function name="orderedPair::operator=">
<behavior name="FORBIDDEN_FUNC"/>
</function>
<function name="orderedPair::operator+">
<behavior name="FORBIDDEN_FUNC"/>
</function>
</functions>
</specifications>
-code-behavior-specifications
を使用して XML ファイルを指定します。解析では、オーバーロードされた演算子のすべての呼び出しが特定され、それらの使用にフラグが設定されます。この方法を使用すれば、演算子のすべてのインスタンスを検索して参照するのではなく、演算子の特定のオーバーロードを区別できます。
チェック情報
カテゴリ: Bad Coding Practices |
バージョン履歴
R2023a で導入
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)