簡易パスワード認証で HTML ファイルを表示する Ruby 製 CGI
Apache や nginx に配置して使える、Ruby 製の CGI を作った。
通常その CGI にアクセスすると何も表示されないが、GET パラメータでパスワードを指定すると HTML ファイルが表示される。
パスワード認証の堅牢性は弱いが、簡易的にパスワード認証をかけたい時はこんなやり方でどうかな、という紹介まで。
目次
ファイル構成
今回は次のような構成で2つのファイルを用意する。
/var/www/html/secret.rb
… 公開されている Ruby CGI ファイル/var/www/private/secret.html
… 隠しておきたい HTML ファイル
/var/www/html/
配下が公開されていて、/var/www/private/
配下は公開されていないファイルが置いてある、ということ。
CGI コード
secret.rb
の内容は次のとおり。
#!/usr/bin/ruby
require 'cgi'
print("Content-Type: text/html; charset=utf-8\n\n")
if CGI.new()['password'] != 'MY-PASSWORD'
print("NG")
else
print(File.read('../private/secret.html'))
end
コードはコレだけ。とてもシンプルな作りだろう。
password
という GET パラメータを取得し、その文字列が MY-PASSWORD
と一致していなければ、「NG」とだけレスポンスする。
パスワードが一致している時は、/var/www/private/secret.html
の内容を print()
することでレスポンスしている。
パスワード文字列はベタ書きにしているが、コレも File.read()
で他のファイルから拾ってきたりするなど、工夫は色々できるだろう。
CGI として動作させるため、$ chmod 755 secret.rb
として実行権限を与えておこう。
アクセス方法
このようにファイルを配置したら、
http://example.com/secret.rb
にアクセスしてみる。すると「NG」とだけレスポンスされるはずだ。しかし、
http://example.com/secret.rb?password=MY-PASSWORD
とパラメータを付与すれば、secret.html
の内容がレスポンスされることが確認できるはずだ。