2015/10/25

萌々ぼ〜ど(正式名:被羅目板,通称:萌え板)をgithubに登録しました(2)

しなしなです。前記事を書いているうちにセキュリティ(笑)バージョンがいるのではないかと思い,リポジトリを増やして作ってみることにしました。

https://github.com/sina2/moesec/

Perlのセキュリティとか思う所とか色々あるのだが,まぁそれはそれとして。
そもそも萌え板のセキュアじゃない機能を外していくと,全部無くなる可能性が。

そしてCGI.pmへの変更は手間なのでやりません。mod_perl入れないとcgi-lib.plの方が速いし。
(追記)
cgi-lib.plとの互換性によるとReadParseに互換はあるけど@inがないのが厳しい。foreach(@in)でContent-Typeとかfilename探すのに結構使われていたりするので。
あとCGI::ReadParseした後でperldocで書いてる方法でContent-Type取得しようとするとそんなHASHない言われた謎。

phpへの変換も手間そうなので、誰かやってくれると喜びます。

主な変更点(下のほうが古いです)

・コンフィグファイルをマークダウン形式に変更

・簡易投票機能の削除

・ランクログ変換機能の削除

・HTML生成機能の削除

・過去ログ機能( past_log.cgi )の削除

・提供機能( sum_up.cgi )の削除

・アイコンの自動削除機能( ico_del.cgi )の削除

・IPAに書いている Perlのセキュリティ対策をしています。

・・コマンドインジェクション対策に open() をsysopen()に変更しました。
https://www.ipa.go.jp/security/awareness/vendor/programmingv1/a04_01.html
このサイトを元に1対1対応で置換。
→ use Fcntl;
open( $fh , $filename )   → sysopen( $fh , $filename , O_RDONLY )
open( $fh , > $filename ) → sysopen( $fh , $filename , O_WRONLY | O_TRUNC | O_CREAT )
open( $fh , +< $filename ) → sysopen( $fh , $filename , O_RDWR )


・・mail関係にopen()使っていたので,機能ごと全削除しましたヽ(`▽´)/
 Encode.pmも要らなくなったので削った。

・・gzip関係にopen()使っていたので,機能ごと全削除しましたヽ(`▽´)/
自前のHTTPのgzip圧縮転送に使われてました。Apacheのmod_gzipで良いじゃないか。

・・system exec backticks fileglob glob eval 関数は使ってなさそう。
https://www.ipa.go.jp/security/awareness/vendor/programmingv1/a04_02.html
 ながめたかんじ。なにか出たら対応します。

・・Taintモードに対応しました
https://www.ipa.go.jp/security/awareness/vendor/programmingv1/a04_03.html

「記事削除」とかアイコン削除」でのファイル削除( unlink )がTaintモードで怒られたのでファイルを消さないようにしました。なので,記事消しても画像ファイルとBGMファイルが残ります。


----ここから下は前記事と同じです。

git (git fetch & git merge origin/master ) でアップデートできるようにしました。
ログファイルや設定ファイルの類はバージョン管理から外しました。ただしmoe_bbs_cnf.pl を除く。
#インストール時にリネームすることで逃げて対応しています。設定の追加はどうやって通知すれば良いのか・・・
#他のファイルは最初の一回目のアクセス時に新規で開くように修正したつもり・・・・元の変更はコメントアウトで残しています。


UTF-8に対応しました。
 iconv 使って スクリプト(.pl,.cgi)を全部UTF-8にしました。

 jcode.plはUTF-8に対応していないため jcode.pl → Jcode.pmEncode.pm と機械的に置換しています。
 &jcode’convert(*hoge,'euc'); → Jcode::convert(*hoge,'euc');  → $hoge = Encode::encode('euc-jp', $hoge)
 &jcode’convert(*hoge,'jis'); → Jcode::convert(*hoge,'jis');  → $hoge = Encode::encode('iso-2022-jp-1', $hoge)

 スクリプトファイル内でHTTPヘッダをつくってるところを置換
HTTP-EQUIV=”Content-type” CONTENT=”text/html; charset=EUC-JP”
→  HTTP-EQUIV=”Content-type” CONTENT=”text/html; charset=utf-8″


cgi-lib.plでもサイズの大きなファイルをアップロードできるように変更しました。
cgi-lib.pl では131072(2^17)bytesが最大ですが,それ以上のファイルサイズでもアップロードできるように変更してます。とりあえず手元の環境では動いている模様。


再配布用に cgi-lib.pl に戻しました。



インストール(詳細は前記事参照)

  $ cd public_html
  $ git clone https://github.com/sina2/moesec.git
  $ chmod 755 moesec
  $ cd moesec
  $ chmod 755 *.cgi

  (必要があれば.htaccess を作ってください。)


アップデート(詳細は前記事参照)

  $ cd public_html/moe
  $ git fetch
  $ git merge origin/master
  $ chmod 755 *.cgi


最後におまじない

当サイトの掲載内容を利用することにより、万一利用者に損害や不利益が生じたとしても、当サイトは一切責任を負わないこととします。

2015/10/16

萌々ぼ〜ど(正式名:被羅目板,通称:萌え板)をgithubに登録しました。

しなしなです。 某所の萌々ぼ〜ど(正式名:被羅目板,通称:萌え板)をgithubに登録しました。

背景

某所で大変お世話になっていたCGIですが,すでに作者のえうのすさんR七瀬さん月読さんのサイトは電子の塵になってしまっています。当時はFLASHもはれる一番人気の萌え板CGIだったのですが,このまま無くなるのも惜しいので,今までの恩返しも兼ねて github に登録してみました。

https://github.com/sina2/moe/



動作環境

Centos6.7 + perl5.10.1 + Encode.pm で動作確認しています。

標準モジュールのEncode.pm使ってるのでPerl5.8以降で動くはず・・・・

Perl のパスは /usr/bin/perl です。

cgi-lib.plはSteven E.Brenner氏のライブラリを再配布するものです。
そしてCGI.pmへの変更は手間なのでやりません。mod_perl入れないとcgi-lib.plの方が速いし。
(追記)
cgi-lib.plとの互換性によるとReadParseに互換はあるけど@inがないのが厳しい。foreach(@in)でContent-Typeとかfilename探すのに結構使われていたりするので。
あとCGI::ReadParseした後でperldocで書いてる方法でContent-Type取得しようとするとそんなHASHない言われた謎。

phpへの変換も手間そうなので、誰かやってくれると喜びます。

主な変更点(下のほうが古いです)

・コンフィグファイルをマークダウン形式にしました。 

セキュリティ対策を多少しました。
コマンドインジェクション対策に open() をsysopen()に変更しました。ただしmail関係とgzip関係は除く。
https://www.ipa.go.jp/security/awareness/vendor/programmingv1/a04_01.html
このサイトを元に1対1対応で置換。
→ use Fcntl;
open( $fh , $filename )   → sysopen( $fh , $filename , O_RDONLY )
open( $fh , > $filename ) → sysopen( $fh , $filename , O_WRONLY | O_TRUNC | O_CREAT )
open( $fh , +< $filename ) → sysopen( $fh , $filename , O_RDWR )

その他のsystem exec backticks fileglob glob eval 関数は使ってなさそう。


git (git fetch & git merge origin/master ) でアップデートできるようにしました。
ログファイルや設定ファイルの類はバージョン管理から外しました。ただしmoe_bbs_cnf.pl を除く。
#インストール時にリネームすることで逃げて対応しています。設定の追加はどうやって通知すれば良いのか・・・
#他のファイルは最初の一回目のアクセス時に新規で開くように修正したつもり・・・・元の変更はコメントアウトで残しています。


UTF-8に対応しました。
 iconv 使って スクリプト(.pl,.cgi)を全部UTF-8にしました。

 jcode.plはUTF-8に対応していないため jcode.pl → Jcode.pmEncode.pm と機械的に置換しています。
 &jcode’convert(*hoge,'euc'); → Jcode::convert(*hoge,'euc');  → $hoge = Encode::encode('euc-jp', $hoge)
 &jcode’convert(*hoge,'jis'); → Jcode::convert(*hoge,'jis');  → $hoge = Encode::encode('iso-2022-jp-1', $hoge)


 スクリプトファイル内でHTTPヘッダをつくってるところを置換
HTTP-EQUIV=”Content-type” CONTENT=”text/html; charset=EUC-JP”
→  HTTP-EQUIV=”Content-type” CONTENT=”text/html; charset=utf-8″

cgi-lib.plでもサイズの大きなファイルをアップロードできるように変更しました。
cgi-lib.pl では131072(2^17)bytesが最大ですが,それ以上のファイルサイズでもアップロードできるように変更してます。とりあえず手元の環境では動いている模様。

再配布用に cgi-lib.pl に戻しました。


インストール(public_html以下にインストールする例)


  $ cd public_html
  $ git clone https://github.com/sina2/moe.git
  $ cd moe
  $ chmod 755 *.cgi
  $ chmod 777 Icon img moelog moelog/pass.cgi

  (必要があれば.htaccess を作ってください。)
 
  この後アクセスすると初期画面になります。
  パスワードを入力する 
            
   NEXTをクリックすると開始します。
           
 セキュリティの関係もあるので,最初は[設定変更]をクリックして管理用パスワードを変更してください。


 同じフォルダに.htaccess とかおいてパスワードつけると,さらにセキュリティは上がるかも(小並感)



アップデート

  $ cd public_html/moe
  $ git fetch
  $ git merge origin/master
  $ chmod 755 *.cgi

TODO?

・スマホ対応?FLASHからHTML5へ変換とか,BGMの再生方法とか

・スパム/荒らしの対策とかいるんだろうなぁ

use warnings とか use strict は一度試してみてあまりの多さに心折れたので,対応する予定は無いです。オープンにしたから誰か対応してプルリクくれると喜びます。

phpへの変換でも喜びます。

・過去ログ機能,基本OFFにしてますにしてます。動作のさせ方がわからない(`;ω;´)

・せっかくgithubにあげたのでいつかはWebhookとかで自動更新できると将来便利かも?
 (追記)ものは見つけたが,backticks使うのでセキュリティ的な意味と,強制アップデートはどうなのかという意味で悩む。https://gist.github.com/mugifly/5087897 


最後におまじない


当サイトの掲載内容を利用することにより、万一利用者に損害や不利益が生じたとしても、当サイトは一切責任を負わないこととします。