アカウント名:
パスワード:
C言語は標準設定で、ポインタ・配列の境界チェックをしたり、セキュアな代替関数がある命令(snprintfとか)は、非セキュアなオリジナル命令を無効にするとかすればいいとおもう
もちろん、コンパイルオプションや、コード内で明示的に指定することでそれらを無効にして、高速なコードを書きたい人は書けるようにして
OSやlibc等速度が必要なコードはチェックを無効にしてビルド、一般アプリはチェックを有効にしてビルドとか
snprintf は sprintf よりはセキュアだけど、サイズを間違えたらバッファオーバランする。あと、strcpy とか strcmp とかの非セキュア関数の代替関数はどうしよう。
単なる例だと思うけれど、 snprintfで指定するサイズ間違える時点ですでに使い方がおかしい。
お作法無視して無頓着に簡略化してコード書くからおかしなことになるだけでC言語の脆弱性はプログラマがそういう書き方しているからとしかおもわないんだよなーC言語でのリソース管理はプログラマのお仕事ですよと。
セキュア関数って基本は、車輪の再開発程度にしか思えないんだけどNUL終端してない文字列とかあそこまで意識する必要があるのかね。。そういうのって文字列じゃなくてバイナリデータの扱いにするだけと思うのだけれど
snprintf の n が何のためにあるのか知らない人がいるのですよ。n に何を渡すか分かってないから、結果それで防止できるはずのバグが防止できないとかよくある。
snprintfはsprintfの相対的なセキュア版でしかないからね。意味がわからない方が良識的だと思う。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
吾輩はリファレンスである。名前はまだ無い -- perlの中の人
標準設定の問題? (スコア:0)
C言語は標準設定で、ポインタ・配列の境界チェックをしたり、
セキュアな代替関数がある命令(snprintfとか)は、非セキュアなオリジナル命令を無効にするとか
すればいいとおもう
もちろん、コンパイルオプションや、コード内で明示的に指定することでそれらを無効にして、
高速なコードを書きたい人は書けるようにして
OSやlibc等速度が必要なコードはチェックを無効にしてビルド、
一般アプリはチェックを有効にしてビルドとか
Re: (スコア:0)
snprintf は sprintf よりはセキュアだけど、サイズを間違えたらバッファオーバランする。
あと、strcpy とか strcmp とかの非セキュア関数の代替関数はどうしよう。
Re: (スコア:0)
単なる例だと思うけれど、 snprintfで指定するサイズ間違える時点ですでに使い方がおかしい。
お作法無視して無頓着に簡略化してコード書くからおかしなことになるだけで
C言語の脆弱性はプログラマがそういう書き方しているからとしかおもわないんだよなー
C言語でのリソース管理はプログラマのお仕事ですよと。
セキュア関数って基本は、車輪の再開発程度にしか思えないんだけど
NUL終端してない文字列とかあそこまで意識する必要があるのかね。。
そういうのって文字列じゃなくてバイナリデータの扱いにするだけと思うのだけれど
Re:標準設定の問題? (スコア:0)
snprintf の n が何のためにあるのか知らない人がいるのですよ。
n に何を渡すか分かってないから、結果それで防止できるはずのバグが防止できないとかよくある。
Re: (スコア:0)
snprintfはsprintfの相対的なセキュア版でしかないからね。
意味がわからない方が良識的だと思う。