セキュアなプログラムを作ろう パート1

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
重要なはずなのにあまり重要視されない項目。
真っ先に考えなきゃいけない項目なのに後回しされる項目。
もっと考えろよ、お前ら
2デフォルトの名無しさん:2005/04/16(土) 12:34:28
考えてみた。面倒なので訴えられそうになったら逃げることで解決することに
決めた。
3デフォルトの名無しさん:2005/04/16(土) 12:34:44
2
4デフォルトの名無しさん:2005/04/16(土) 12:36:04
屁゜
5デフォルトの名無しさん:2005/04/16(土) 12:42:41
できるだけchar*を使わずCStringやstd::stringを使う
文字数が制限できるlstrncpy、lstrncatを使う
全てにおいて余分なメモリを確保するようにする(昔は節約が重要だったが今はそうではない)
エラー処理、例外処理は手抜きしない
領域外の書き込みだけでなく領域外の読みにも気をつける
ウインドウメッセージを過信しすぎない


あえて挙げるならこれくらいか?
6デフォルトの名無しさん:2005/04/16(土) 13:37:56
7デフォルトの名無しさん:2005/04/20(水) 13:42:35
>>5
理由を伴わずにそんなことを書いている段階でダメすぎ。
8デフォルトの名無しさん:2005/04/20(水) 21:40:19
自分の作ったプログラムを疑うことからはじめよう
9デフォルトの名無しさん:2005/04/24(日) 23:08:30
SQLインジェクションを防ごうとか
system()はヤバイとか
printf(buf)じゃなくてprintf("%s",buf)にしろとか

みんな興味ないのかな
10デフォルトの名無しさん:2005/04/25(月) 00:27:30
char buf[1024];

GetWindowText(hwnd, buf, sizeof(buf)-1);

GetWindowText(hwnd, buf, sizeof(buf));

どっちが正しいのですか
11デフォルトの名無しさん:2005/04/25(月) 00:44:10
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpwinui/html/_win32_getwindowtext.asp
>nMaxCount
>バッファにコピーする文字の最大数を指定します。テキストのこのサイズを超える部分は、切り捨てられます。NULL 文字も数に含められます。
12デフォルトの名無しさん:2005/04/25(月) 00:52:01
const使え
assert使え
13デフォルトの名無しさん:2005/04/25(月) 03:22:39
>>11
で、どっちが正しいのですか
14デフォルトの名無しさん:2005/04/25(月) 06:27:49
char buf[1024]の場合
ASCII文字列だと何文字分入れられるかわかってないだろ
15デフォルトの名無しさん:2005/04/25(月) 22:13:07
>>13
何がわからんのよ
16デフォルトの名無しさん:2005/04/25(月) 22:16:45
CSRFってのはXSSとどう違うんですか

ITmediaの記事を読んでも良く分からんです
17デフォルトの名無しさん:2005/04/25(月) 22:51:01
>>15
日本語
18デフォルトの名無しさん:2005/04/26(火) 23:34:22
char buf[1024];
GetWindowText(hwnd, buf, sizeof(buf));
でいいよ
ASCII文字なら1023文字+\0まで取得可
19デフォルトの名無しさん:2005/04/27(水) 20:02:26
>>17
それならASCIIとは言えない。どっちにしてもA版APIではバイト数と読み替えればよい。
20デフォルトの名無しさん:2005/09/28(水) 04:05:50
マルチスタックってどうよ
21デフォルトの名無しさん:2005/12/03(土) 17:02:44
良スレあげ
22デフォルトの名無しさん:2005/12/03(土) 17:07:39
良スレだな
23デフォルトの名無しさん:2005/12/03(土) 18:04:02
なんだか物すげー感覚が空いてるなw
作ろうというより、個人的には
誰かがオープンソースのプログラムをうp
           ↓
このスレでセキュリティに関する検討・ソース修正
みたいな流れが好きだ。
今の2chならどんな物も修正が出来るかも・・・
24デフォルトの名無しさん:2005/12/03(土) 18:08:10
よし俺様がなんでも答えたる。
ただ、あまりにもレベルの高い質問はするなよ。
よく分かんない時はスルーするから。
25デフォルトの名無しさん:2005/12/03(土) 19:41:47
#define BUFFERSIZE 123

char buf1[BUFFERSIZE] = "const 使えよっつー突っ込みはどうでもいい";
char *buf2 = (char *)malloc(BUFFERSIZE * sizeof(char));

sprintf(buf2, "abc %.*s def", BUFFERSIZE, buf1);
26デフォルトの名無しさん:2005/12/03(土) 19:46:12
>>25
なんだこの糞コードは
2724:2005/12/03(土) 20:58:29
よくわからんけど、なんでバッファオーバーフローの話ばっかしてんだ?
おまいらCでCGIでも書いてんの?

そうだとしたら尊敬するかも。
28デフォルトの名無しさん:2005/12/03(土) 20:59:29
しかしスレ違いではない
29デフォルトの名無しさん:2005/12/03(土) 21:23:12
>>25
ハゲシクワロタ
30デフォルトの名無しさん:2005/12/04(日) 09:37:37
正直に言うと、
sprintfは使えるんだけど、嫌い。
ファイルストラクタを使ってfprintfで出力させるのが手堅いが・・・
プロでもない漏れの技術じゃムリポ。
>>27
バッファオーバーフローが一番セキュリティの問題点として取り上げられるからじゃん?
31デフォルトの名無しさん:2005/12/04(日) 11:28:33
ここはWebProg板じゃなかったね。
勘違いしてた
32デフォルトの名無しさん:2005/12/04(日) 23:37:49
ttp://ja.wikipedia.org/wiki/Goto%E6%96%87
を見ると、goto文もバッファオーバフローの原因になるって書いてるからな(笑)。
そりゃもうなんでもかんでもバッファオーバーフローってことで。
33デフォルトの名無しさん:2005/12/04(日) 23:57:03
int main(int argc, char** argv) {
char buf[80];
sprintf(buf, "%s", argv[1]);
printf(buf);
}

こういう感じのセキュアでないプログラムと
それを破るプログラムの簡単な実例集みたいなのって
どっかにないんすかね?
34デフォルトの名無しさん:2005/12/05(月) 00:11:34
ま、ポインタの先に定義されてない可変長のデータ突っ込むな!とやれば解決か?
35マイク ◆yrBrqfF1Ew :2005/12/05(月) 00:13:32
>それを破るプログラムの簡単な実例集みたいなのって
>どっかにないんすかね?

IPAにあるだろ
http://www.ipa.go.jp/security/awareness/vendor/programming/b06.html
36デフォルトの名無しさん:2005/12/05(月) 04:12:46
セキュアとかってつまんないんだよ。
だから、誰も目を向けないんだよ。
でも大事だから、お金はまわすべきだとおもうけどさ
37デフォルトの名無しさん:2005/12/05(月) 08:21:22
snprintfって普通に使えないのか?
38デフォルトの名無しさん:2005/12/05(月) 14:45:27
>>36窓とペンギンを比較してみろ。
>>37
>>35のページに書いてあるけど、sprintfの代用関数として使用できるしオーバーフローはしないっぽい。
39デフォルトの名無しさん:2005/12/05(月) 23:52:19
なんだかんだいって、窓のほうが優れてるよw
40デフォルトの名無しさん:2005/12/06(火) 00:14:25
_snprintfとか_snprintf_sとか馬鹿じゃね?
普通に作れよ。 >M$

>>39
金取ってんだから当たり前だ。
自慢するほどのことじゃない。
41デフォルトの名無しさん:2005/12/06(火) 00:35:20
お前だって金とってるだろ!!!!!
42デフォルトの名無しさん:2005/12/06(火) 13:15:46
JavaでセキュアなDNSサーバーを作ろうと考えているのですが、
参考に出来るようなサイトはあるでしょうか。
ネットワーク板で聞いたらここで聞けと言われました。
43デフォルトの名無しさん:2005/12/06(火) 13:27:34
44デフォルトの名無しさん:2005/12/07(水) 01:12:55
>>1
> 重要なはずなのにあまり重要視されない項目。
> 真っ先に考えなきゃいけない項目なのに後回しされる項目。
> もっと考えろよ、お前ら

それは、あたかも武器がなくてもアメリカに
勝てると勘違いして旧日本陸軍に支配された大日本帝国だけ。

全てはCOBOLerやC++厨やM$が悪い

45デフォルトの名無しさん:2005/12/07(水) 01:15:07
>>5- 以降へ

そんなにセキュリティに拘りたければC++の使用を辞めて
率直にJavaを使えばいい
46デフォルトの名無しさん:2005/12/07(水) 01:19:03
<hidden>を使ってデータ転送しない。
コメントは
<!-- -->ではなく%-- --%>を使う。


当たり前
47デフォルトの名無しさん:2005/12/07(水) 01:25:30
接続はtelnet, rsh, rlogin, ftpを使わず
ssh, scp, sftpを使う。

SSLを使ってhttp://ではなhttps://を使う

セキュリティ上問題があるCGIを全面的に徹底的に排除する。





当たり前か
48デフォルトの名無しさん:2005/12/07(水) 02:08:08
セキュリティ対策のためにC言語厨/C++厨に対する !警告!

●プリプロセッサを使用禁止しろ!
●定数は必ずconstで押さえろ!
●不変クラスにする必要があるものはできるかぎり不変クラスにしろ!
●実装メソッドがあるクラスの多重継承を禁止しろ!
●グローバル変数、グローバル関数を使用禁止にしろ!
●構造体、共用体の使用を禁止しろ!
●関数ポインタの使用を禁止しろ!
●演算子オーバーロードを使うな!
●typedef使用禁止!
●もしこれらの鉄則を遵守しなければC++厨もC言語厨も
このソフトウェア業界から出て行け!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
さもなければ、氏ねェェェェェェェェェェェェェェェェーーーーーーーーーーーーーーーーーーーーーーーーィ!!!!!
ブシュッ! グザァッ! グウォァ!(C言語厨、C++厨が切り刻まれる効果音)
「うぐぁぁぁぁ!だずげでぐれぇぇぇぇ!がぁぁぁ!…ぐぶっ………」(C言語厨、C++厨が死ぬ直前に発する最後の断末魔)
49デフォルトの名無しさん:2005/12/07(水) 02:12:45
> ●プリプロセッサを使用禁止しろ!
#include禁止令キタコレ
50デフォルトの名無しさん:2005/12/07(水) 02:18:10
●typedef使用禁止!

これもかよwwww
51デフォルトの名無しさん:2005/12/07(水) 07:58:10
>>48はC/C++の高機能について行けなかったjava厨
52デフォルトの名無しさん:2005/12/07(水) 12:12:37
全般的にセキュリティ対策とは関係ないとしか思えない。
53デフォルトの名無しさん:2005/12/08(木) 00:37:35
多重継承禁止って・・・MFCは使えねえな。
54デフォルトの名無しさん:2005/12/08(木) 01:20:16
多重継承って必要?
55デフォルトの名無しさん:2005/12/08(木) 19:08:43
>>48
C/C++でさえも扱えないJava厨乙。
> ●不変クラスにする必要があるものはできるかぎり不変クラスにしろ!
日本語がおかしいだろ。
Javaのやり過ぎでとうとう日本語も使えなくなってきましたか。( ´,_ゝ`)プッ
>>54
場合によっちゃ必要らしい。
漏れはOOPの経験が浅いからよく分からないが、OOPの経験が深い先輩が、「C++でもJavaでも多重継承が必要だ。」みたいな事を言ってた。
56デフォルトの名無しさん:2005/12/08(木) 19:51:52
多重継承というか、一つのクラスに複数のインタフェースを実装できる能力がないと困る。
57マイク ◆yrBrqfF1Ew :2005/12/08(木) 23:51:13
58デフォルトの名無しさん:2005/12/09(金) 01:28:32
某スレでsizeofを使うのはもってのほかだ、非常に危険だと書かれまくってましたが、
sizeofを使わないで安全にサイズを指定するってのはどうやるんでしょうか?
本当はそのスレでカキコした人に聞くのが良いのでしょうがスレ違いらしかったので。
59デフォルトの名無しさん:2005/12/09(金) 01:49:46
>>58
一律にダメってわけじゃない。自分が担当してる関数内のローカル変数
に使うのに躊躇する理由はない。
配列でもポインタでも動くことが期待されるマクロに使うのが超危険と
いう話だった。
60デフォルトの名無しさん:2005/12/09(金) 07:16:25
>>49
#includeだけは例外。
っていうか禁止したいのは#ifdefとかの煩わしいものだろ。
そういうスパゲティコード馬鹿生成器なる無駄なものはいらない。
61デフォルトの名無しさん:2005/12/09(金) 07:17:25
>>50
クラス定義できればtypedefなんていらんだろ。
C++をまともにつかいこなしたければ
typedefなど無駄な機能は徹底的に排除すべきだ。
62デフォルトの名無しさん:2005/12/09(金) 07:18:43
>>51
無駄なプリプロセッサやゴミみたいな余計な機能を
高機能だとはさすがに言うわけにはいかないな。
63デフォルトの名無しさん:2005/12/09(金) 07:19:57
>>55
そんな言い方をしていると
C/C++の、(まるでそろばんのように)無駄な機能を
使いこなせただけで偉くなった、凄いスキルを持っている能力があると
勘違いして自惚れているC言語厨乙って言われるぞw
64デフォルトの名無しさん:2005/12/09(金) 07:27:00
>>55
> >>48
> C/C++でさえも扱えないJava厨乙。
> > ●不変クラスにする必要があるものはできるかぎり不変クラスにしろ!
> 日本語がおかしいだろ。
> Javaのやり過ぎでとうとう日本語も使えなくなってきましたか。( ´,_ゝ`)プッ

不変クラスはC++でも作ることができることを知らないのか。( ´,_ゝ`)プッ
オブジェクト指向を知らないで聞いたことがない用語を聞くと
すぐ「日本語がおかしい」と言い切るのはまだまだC++を扱えないC言語厨乙だぞ( ´,_ゝ`)プッ
( ´,_ゝ`)プッ ←馬鹿っぽいAAだけど使ってみたぞ( ´,_ゝ`)プッ

> >>54
> 場合によっちゃ必要らしい。

おいおい、C++を扱えるんだったら「C/C++でさえも扱えないJava厨乙。 」
と言い切る奴がそんな「場合によっちゃ必要らしい。 」なんて言うのは恥ずかしいぞ( ´,_ゝ`)プッ

> 漏れはOOPの経験が浅いからよく分からないが、OOPの経験が深い先輩が、「C++でもJavaでも多重継承が必要だ。」みたいな事を言ってた。
Javaで多重継承ができると思ってるのかC言語厨( ´,_ゝ`)プッ
実装多重継承とインターフェース継承との違いくらい区別つけろよ( ´,_ゝ`)プッ
C/C++/Javaでさえも扱えないC++厨の皮を被ったただのC言語厨乙。 ( ´,_ゝ`)プッ

( ´,_ゝ`)プッ
( ´,_ゝ`)プッ
( ´,_ゝ`)プッ
65デフォルトの名無しさん:2005/12/09(金) 08:00:12
Java厨乙www
66デフォルトの名無しさん:2005/12/09(金) 17:05:55
>>61
テンプレートをごちゃごちゃ使うときにはないと不便だよ。
勿論テンプレート使っている時点でまともじゃないとか言うなよ。
67デフォルトの名無しさん:2005/12/10(土) 06:55:04
>>64必死だなw
68デフォルトの名無しさん:2005/12/10(土) 23:38:12
#ifdef HOGE_HOGE__
 typedef int int32;
#else
 typedef long int32;
#endif

これがダメとかぬかされると、笑うしかねえな
69デフォルトの名無しさん:2005/12/10(土) 23:39:48
>>68
下線が2つ並んだ部分が含まれる識別子は予約されている。
ただしC++の場合。Cなら別にいいけどさ。
70デフォルトの名無しさん:2005/12/10(土) 23:58:26
まあ、どうでもいいだけどさ
コンパイラがはじめっから定義してるマクロ
という意味合いで書いたんだがな

あと、C++ならlimitsとテンプレートでできるな
typedefはするだろうが
71デフォルトの名無しさん:2005/12/14(水) 07:01:52
MLでスマートに書けばいいじゃん。
72デフォルトの名無しさん
プ リ キ ュ ア プ ロ グ ラ ミ ン グ