ウェブサーバのパフォーマンスの向上よりも、 セキュリティ重視の方針で可能な限りセキュリティに配慮した実装を行っています。 具体的には次のような対策をしています。
できるだけ動的にメモリを確保するように xstrncpy() や xasprintf() などの独自の wrapper 関数群を作成して、バッファ溢れを防止しています。
入力された URI 内のメタキャラクタ <,>,&," を <,>,&," に変換します。 ただし、QUERY_STRING に相当する部分は変換していません。
http://server/foo.html<script>悪意あるコード</script> は、 http://server/foo.html<script>悪意あるコード</script> に変換されます。
http://server/foo.html%3Cscript%3E悪意あるコード%3C/script%3E は、 http://server/foo.html<script>悪意あるコード</script> に変換されます。
http://server/cgi-bin/foo.cgi?<script>悪意あるコード</script> は、変換されません。 つまり、環境変数 QUERY_STRING には、 <script>悪意あるコード</script> がそのまま設定されます。
これは、CGIプログラム作成者の方でどのように QUERY_STRING を利用するかが、 想定できないためです。 CGIプログラム作成者は環境変数の利用には十分注意してください。
SSI の <!--#exec cmd="〜"--> を利用すると、 ユーザはシステム内の任意のコマンドを実行できます。 Wyvern では、 &;`'\"|*?~<>^()[]{}$\n\r のシェルのメタ文字を含む命令は実行されません。 同時に、ErrorLog で指定されたファイルにコマンドを記録します。
またシステム内のファイルにアクセスするような <!--#include … --> や <!--#fsize … -->、 <!--#flastmod … --> 命令では、 ファイルのパスに /etc,/bin,/sbin,/usr,/var を含む場合は、 アクセスを禁止しています。同時に、エラーログに次のような記録されます。
[Tue, 15 Jan 2002 14:09:47 GMT] [emerg] invalid file access [/etc/passwd] in SSI
Wyvern では、現在、Basic認証機能しか提供していませんが、 認証データを MD5 符号化と dbm により管理しています。 通常の crypt() を使った符号化とテキストファイルによる管理よりは、 安全性が向上します。また、SSL による暗号化通信も利用可能なので、 Basic認証でも SSL と組み合わせれば従来の方法よりも、 安全なユーザ認証が可能となります。
デフォルトの設定では、シンボリックリンクファイルは ServerRoot および DocumentRoot と UserDir 内のファイルに制限されています。 シンボリックリンクファイルにアクセスした場合は、 以下のように必ずエラーログファイルに記録されます。
[Sun, 27 Jan 2002 06:47:54 GMT] [alert] request URI '/mrtg.html' is an unsecure symbolic file '/usr/local/share/doc/mrtg/index.html'. [Sun, 27 Jan 2002 06:47:54 GMT] [error] localhost "GET /mrtg.html HTTP/1.0" Forbidden (403) [Sun, 27 Jan 2002 06:53:19 GMT] [notice] request URI '/top.html' is a symbolic file 'cover.html'
シンボリックリンクのチェックを行いたくない場合は、 FollowSymLinks の値を off にするか、 コメントアウトしてください。 また、設定ファイルである wyvern.conf がシンボリックリンクファイルの場合は、 wyvern 自体が起動できないので注意してください。
その他のセキュリティ機能としては、次のような制限を設けています。