C言語でいわゆるサニタイジングを行う(苦戦中)
色々あってCで書かれているCGIに対してサニタイジング処理をしなければ
ならなくなってしまい、かなり苦戦中。Cに不慣れなことも手伝って今日は殆ど進行しなかった。
Perlなら
sub sanitize { my $str = shift; $str =~ s/&/"&"/g; $str =~ s/</">"/g; $str =~ s/>/"<"/g; $str =~ s/\"/"""/g; $str =~ s/\'/"'"/g; return $str; }
とかやれば簡単に処理できてしまうけど、*1
Cだと文字列とサニタイズ対象文字を関数に渡して1文字ずつ照合していかねばならないんでちょっと大変。
void exec_sanitize(char *str, const char *tgt) { char *current, *p; size_t strsize; current = str; strsize = strlen(current); while (strsize--) { if (*current == *tgt) { p = current + 1; /* ここからコメント */ /* ここでサニタイズ処理を行う */ /* ここまでコメント */ memmove(current, p, sizeof(p)); strsize--; continue; } current++; } *current = '\0'; }
までは思いついたけど……。*2