sidewalkcafe blog

日々是好日

POTI-boardのコード編集

某所で設置しているPOTI-board
PHPスクリプト - お絵かき掲示板『POTI-board』 - ぷにゅねっと
お絵描き掲示板としては優秀なんだけど
2008年から更新が止まって色々と問題があるので
問題があるところを抜き出して変更して行くつもり

予定

  • ページ数が増えるとhtml書き出しが重くなるので2ページ目以降は動的に表示させる(済)
  • パスワードのハッシュ方式を最新のものに変える(済)
  • ログをデータベース化する(SQLite)
  • エラー(警告)が多いので改善する
  • セキュリティの向上
  • スマホ表示に対応する(テーブルレイアウトの削除)
  • 初期設定画面をつくる(パスワード等の設定)

変更点

  • ページャー作成
    • updatelog()をコピーしてpaging()をつくる
    • updatelog()の2ページ目以降の書き出し処理は消す
    • 前ページは $dat['prev'] = PHP_SELF.'?p='.$prev/PAGE_DEF;
    • 次ページは $dat['next'] = PHP_SELF.'?p='.$next/PAGE_DEF; に変更
    • 各ページリンクは$pformat = str_replace("", PHP_SELF.'?p='.$i/PAGE_DEF , $pno);
    • ページ数を取得し、echo( htmloutput(MAINFILE, $dat, true)); で表示する
    • 表示ページまで飛ばす処理 if($page != $p && $page < $p) continue ;
    • p=0でindexも表示出来る、表示出来ないページにエラー処理を入れる
  • パスワードハッシュ変更
    • md5をpassword_hash()に変更
    • CreatePass()をつくる
    • $p = password_hash($d, PASSWORD_DEFAULT); return $p;
    • パスワード比較用のVerifyPass()をつくる
    • if (password_verify($d, $p)) return true ;
    • 旧パスワードデータを流用する場合、md5との比較ができるようにする
    • if (OLD_HASH && $n <= OLD_HASH){ md5との比較 }として、指定noより前の書き込みについて比較できるようにする
    • 管理者パスワードはあらかじめハッシュ化したものをconfigに保存しておく
  • SQLite化する(予定)
    • テーブル作成処理を追加
    • 旧ログデータ変換用のスクリプトを別につくる
    • ツリーと表示順も同時に保存
    • テーブル:id番号,日時,Mail,題名,コメント,URL,host,USERID,Pass,拡張子,画像幅,画像高,ファイル名,サムネ,チェックデジット,描画時間,fontカラー,ツリー番号,表示順
    • 親はid番号=ツリー番号、子は表示順=0
    • "select * from bbs order by hyouji asc, tree desc, id asc"でデータ取得(予定)
    • 表示をまとめて関数化する(予定)
  • エラー改善
    • 変数宣言してないところでif(変数)としてる所が多いのでif(isset(変数))にする
    • if(isset(${$a}))${$a}=0; こういう関数つくっても良いかも?
    • テンプレートのifneを使ってる部分が良くエラーに成るのでndefに戻す
  • セキュリティの向上
    • パスワードハッシュ変更(済)
    • 埋め込みパスワードhiddenをセッションに変更
    • extract()をなんとかする
    • eval()もなんとかしたいけどどうすれば良いのかわからんw
    • 今どき管理人用リンクを一般公開してるところも無いのでphp?mode=adminとかでアクセスしてもらう
    • 初回のみ設定用スクリプトを走らせる?wordpressみたいにできたらよいけどめんどそうw
    • 文字コードutf-8固定で良くない? いまさらsjisとかeucとか文字化けのもとだし?
  • スマホ表示に対応する(予定)
    • テーブルレイアウト削除
    • CSSファイルをまとめる
  • 初期設定画面(予定)
    • 最初はconfigファイルを用意せず、config-defaultを入れておく
    • configファイルが無い場合、入力フォーム画面に飛ばす
    • 各項目をフォーム入力→config書き出し保存
    • パスワードは最初に計算、保存