下記サイト記事の一つ目の例についてです。
https://www.jpcert.or.jp/sc-rules/c-fio30-c.html
違反コードでは、fprintf関数を使用しており危険、適合コードはfputs関数で回避とありますが、ユーザーからの入力を元にした文字列msgをsnprintfで構築しているのは両方とも変わりませんが、それを書式文字列として扱うかどうかによって件名の関数の危険有無が変わるというのがいまいち分かりません。
ユーザーの危険な入力を何か一例として、解説をお願い出来ないでしょうか?
No.1
- 回答日時:
ユーザーが入力したパスワードに、%sや%fが含まれていると、msgバッファーに、%sや、%fが含まれてしまうので、
fprintf(stderr, msg);
で、おかしな動作をしてしまいます。なので、fputs()で、ただの文字列として出力してくださいということだと思います。
No.2
- 回答日時:
>それを書式文字列として扱うかどうかによって件名の関数の危険有無が変わるというのがいまいち分かりません。
危険性についてはNo1さんの回答に1票。
個人的には、fputs関数で回避するのではなく、
fprintf(stderr, msg);
を、書式文字列 と 出力文字列をちゃんと分離して
fprintf(stderr, "%s", msg);
とすればよいだけのことと思います。
No.3ベストアンサー
- 回答日時:
例えば、ユーザー入力(mgs)が "%s%s"
で
fprintf(stderr, msg);
なんて実行したらたいてい落ちます。
%sに対応するパラメー夕(文字列のポイン夕)をパラメー夕スタックから読みますが、与えていないので不正値を読み、それを使って文字列を読み取ろうとして、たいていは不正メモリアクセスになります。
お探しの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も見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
C言語の関数と配列に関する質問
C言語・C++・C#
-
mallocについて
C言語・C++・C#
-
double型が正常に認識されていない恐れ
C言語・C++・C#
-
-
4
これなにがちがうんですか??
C言語・C++・C#
-
5
gccを行ってもexeファイルが生成されない
C言語・C++・C#
-
6
WindowsのCapsLock(キャップスロック)って、何の意味があるんですか?
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#
-
16
C言語 解答について。
C言語・C++・C#
-
17
C言語って古いですか?
C言語・C++・C#
-
18
パイソン。If elseの挙動について教えてください。パソコンは、if else で、まずifに当て
C言語・C++・C#
-
19
c言語
C言語・C++・C#
-
20
gcc13.2のバグ?
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでアルファベットか数...
-
Excelで指数表現しないようにす...
-
EXCELで=より左の文字を一括で...
-
Excelで3E8を3.00E+8にしない方...
-
文字列からタブコードを取り除...
-
エクセルで文字列をtxtファイル...
-
VBAでの Replace関数で、ワイル...
-
VBA2005 16進を2桁で表示したい。
-
MS SQLServer のSQLで文字列の...
-
Left関数とRight関数を合わせた...
-
エクセルで文字列の最大値を抽...
-
同一セル内に関数と文字列を同...
-
aaa.bbb.ccc という、「ドット...
-
textboxユーザーコントロールの...
-
VBの「As String * 128」とは?
-
Excelで偶数行だけ文字列を数え...
-
エクセル 数値データを桁をそ...
-
【Excel VBA】複数ある特定の文...
-
UNIX:縦一列のファイルを横一行...
-
sedなどで、特定の文字列の後の...
マンスリーランキングこのカテゴリの人気マンスリー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 使用時のプロシージャへ...
おすすめ情報