下記サイト記事の一つ目の例についてです。
https://www.jpcert.or.jp/sc-rules/c-fio30-c.html
違反コードでは、fprintf関数を使用しており危険、適合コードはfputs関数で回避とありますが、ユーザーからの入力を元にした文字列msgをsnprintfで構築しているのは両方とも変わりませんが、それを書式文字列として扱うかどうかによって件名の関数の危険有無が変わるというのがいまいち分かりません。
ユーザーの危険な入力を何か一例として、解説をお願い出来ないでしょうか?
No.3ベストアンサー
- 回答日時:
例えば、ユーザー入力(mgs)が "%s%s"
で
fprintf(stderr, msg);
なんて実行したらたいてい落ちます。
%sに対応するパラメー夕(文字列のポイン夕)をパラメー夕スタックから読みますが、与えていないので不正値を読み、それを使って文字列を読み取ろうとして、たいていは不正メモリアクセスになります。
No.2
- 回答日時:
>それを書式文字列として扱うかどうかによって件名の関数の危険有無が変わるというのがいまいち分かりません。
危険性についてはNo1さんの回答に1票。
個人的には、fputs関数で回避するのではなく、
fprintf(stderr, msg);
を、書式文字列 と 出力文字列をちゃんと分離して
fprintf(stderr, "%s", msg);
とすればよいだけのことと思います。
No.1
- 回答日時:
ユーザーが入力したパスワードに、%sや%fが含まれていると、msgバッファーに、%sや、%fが含まれてしまうので、
fprintf(stderr, msg);
で、おかしな動作をしてしまいます。なので、fputs()で、ただの文字列として出力してくださいということだと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語の関数と配列に関する質問 8 2024/02/27 15:45
- Excel(エクセル) エクセル関数の変わった使い方 3 2022/05/13 17:12
- 日本語 算用数字と漢数字の使い分け 5 2023/10/16 08:50
- Excel(エクセル) 式の解読のお願いm(_._)m 4 2024/02/22 19:16
- C言語・C++・C# プログラミングの問題です。至急教えてください。 /***から***/の部分をプログラミングにしてほし 1 2022/10/13 11:48
- その他(プログラミング・Web制作) 文字コード及びフォントに関する次の記述を読み,適切なものをすべて選べ。 ASCIIとは,英数字だけを 4 2023/01/11 19:10
- Gmail マイクロソフトアカウントチームから「あなたの一時使用コード」メールが来る 1 2024/02/01 14:48
- Visual Basic(VBA) 以下のVBAで該当文字列の前後に付与したい。 例 前に付与 abc ユーザーID 12345 後に付 3 2022/04/19 21:50
- JavaScript JavascriptでDom XSSの脆弱性対策を行いたい 2 2023/09/24 21:20
- その他(プログラミング・Web制作) python質問 1 2023/08/14 11:54
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
C言語の関数と配列に関する質問
C言語・C++・C#
-
double型が正常に認識されていない恐れ
C言語・C++・C#
-
WindowsのCapsLock(キャップスロック)って、何の意味があるんですか?
C言語・C++・C#
-
-
4
gccを行ってもexeファイルが生成されない
C言語・C++・C#
-
5
mallocについて
C言語・C++・C#
-
6
これなにがちがうんですか??
C言語・C++・C#
-
7
なんかC言語でプログラム書いてると脳汁というかエクスタシーというかなんかすげえ気持ちいいんですけどな
C言語・C++・C#
-
8
C言語をコンパイルするとコンピュータ上でどう動くかというコードになるみたいな説明をよく聞くのですがこ
C言語・C++・C#
-
9
こんなことてしますか??
C言語・C++・C#
-
10
C言語 配列と関数の練習問題
C言語・C++・C#
-
11
C言語について。
C言語・C++・C#
-
12
C言語 バッファについて。
C言語・C++・C#
-
13
C言語について
C言語・C++・C#
-
14
C言語って古いですか?
C言語・C++・C#
-
15
C言語関数違いについて。
C言語・C++・C#
-
16
ストリーム 意味について。
C言語・C++・C#
-
17
C言語 解答について。
C言語・C++・C#
-
18
gcc13.2のバグ?
C言語・C++・C#
-
19
パイソン。If elseの挙動について教えてください。パソコンは、if else で、まずifに当て
C言語・C++・C#
-
20
c言語
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
Excelはなんで先頭の0を消すん...
-
Left関数とRight関数を合わせた...
-
VBA2005 16進を2桁で表示したい。
-
文字列からタブコードを取り除...
-
同一セル内に関数と文字列を同...
-
エクセルで文字列の最大値を抽...
-
VBAでの Replace関数で、ワイル...
-
Excelで3E8を3.00E+8にしない方...
-
sedなどで、特定の文字列の後の...
-
エクセルで文字列をtxtファイル...
-
エクセルでセル内の文字列の最...
-
VBの「As String * 128」とは?
-
OnTime 使用時のプロシージャへ...
-
エクセル 数値データを桁をそ...
-
“丸(〇/○/◯)”に似た文字…
-
[C言語]fputsとfprintfの違い
-
【excel】複数のセルを対象に特...
-
NULLの定義について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
文字列からタブコードを取り除...
-
Excelで3E8を3.00E+8にしない方...
-
VBAでの Replace関数で、ワイル...
-
Excelで指数表現しないようにす...
-
[C言語]fputsとfprintfの違い
-
エクセルで文字列をtxtファイル...
-
同一セル内に関数と文字列を同...
-
エクセルで文字列の最大値を抽...
-
Excelはなんで先頭の0を消すん...
-
MS SQLServer のSQLで文字列の...
-
エクセル 数値データを桁をそ...
-
Left関数とRight関数を合わせた...
-
VBA2005 16進を2桁で表示したい。
-
VBの「As String * 128」とは?
-
Msgboxの×が押されたとき
-
sedなどで、特定の文字列の後の...
-
【Excel VBA】複数ある特定の文...
-
OnTime 使用時のプロシージャへ...
おすすめ情報