C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

Cの例を使用して文字列の脆弱性と防止をフォーマットする


フォーマット文字列 −文字列のフォーマットに使用されるASCII文字列です。これは、テキストとフォーマットパラメータで構成されるASCII文字列です。

プログラムの出力であるフォーマットについては、Cにはさまざまなフォーマット文字列があります。

フォーマット文字列の脆弱性

これらは、プログラマーが簡単に作成できるプログラミングエラーが原因で発生するバグです。このようなエラーが発生しやすいコードブログがprintf、sprintf、などの出力関数に渡された場合 次に、任意のメモリアドレスに対して書き込み操作が実行されます。

#include<stdio.h>
#include<string.h>

int main(){

   char buffer[100];
   strncpy(buffer, "Hii ", 5);
   printf(buffer);

   return 0;
}

予防策

フォーマット文字列の脆弱性を防ぐために実行できる対策がいくつかあります

  • データを入力する代わりに、プログラムの一部としてフォーマット文字列を使用してみてください。これらは、「%s」文字列形式を使用して簡単に解決できます。

  • フォーマット文字列を作成するために定数を使用し、定数文字列で使用する代わりに、関数呼び出しの引数としてすべての変数文字列を抽出します。

  • 定数および変数の文字列初期化ノルムに従わない場合は、フォーマットガードが使用されます。


  1. JavaScriptエラーと例による例外処理

    JavaScriptを使用してエラーおよび例外処理の概念を実装する例を見てみましょう- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> <style&

  2. C++での例を含む式ツリー

    式ツリーは、ツリーの各ノードが演算子またはオペランドで構成される特殊なタイプの二分木です。 リーフノード ツリーのオペランドを表します 。 非リーフノード ツリーの演算子を表します 。 例: 簡単に解決できる中置式を取得するには、順序トラバーサルを使用してツリーをトラバースする必要があります。