現在D言語でファイルを扱うプログラムをテストで組んでいます。
以下のようなコードはファイルレースコンディション脆弱性を含みます。
これを防ぐにはD言語が提供するAPI以外(OS依存)でやらないと実現できないのでしょうか。
D言語
1void main() 2{ 3 string path="test.bin"; 4 5 // ファイルがなければ新規作成 6 if(!exists(path)){ 7 // このタイミングで新規作成するファイル名が 8 // シンボリックリンクにすり替えられると 9 // リンク先が空ファイルとなり破壊される。 10 scope File fp = File(path,"wb"); // 空ファイル新規作成 11 writeln("created."); 12 } 13 // シンボリックリンクだったら終了する 14 if(isSymlink(path)){ 15 return; 16 } 17 // ここから 18 writeln("no symlink."); 19 // このタイミングでシンボリックリンクへの 20 // すり替えが行われると 21 File fp = File(path,"rb+"); 22 // ↓のファイル書き換え処理によるリンク先の書き換えが発生 23 fp.rawWrite([0,20,30,40]); 24}
現状、WindowsとLinux用にソースを分けて書くくらいしか考えられておりませんが、D言語の標準ライブラリで可能ならそちらで対応したいと思っています。
標準ライブラリにアトミックにこれら一連の(チェック&作成、チェック&オープン)処理を行う機能はありますでしょうか。
以上、ご回答のほど宜しくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。