PHP5でブログのようなものを自作したいと考えています。


・IDとパスでログインして、ログイン者がそれぞれのブログを運営できる
・記事の投稿・修正・削除の管理機能
・トラックバック、コメント、フィード出力機能は無い
・データは全てMySQL

ブログというより、「ログイン者それぞれに文章を書いてもらい、それをデータベースに格納するだけ」のシステムといった趣きでしょうか。文章をWEB上からデータベースに入力するという事に重点を置きたいのです。もちろん編集等の管理機能も付けます。

・PHP5(Pear)
・MySQL5
を使用します。フレームワークは考えていません。

この一連の流れを実現するのに最適なWEB上のドキュメント、あるいは書籍を紹介して欲しいです。MovableTypeやWordPress等は規模が大きすぎて中身を見てもよくわかりません。もっと小規模なブログシステムで中身を見られるものがあればそれでも構いません。

変な質問ですが、どうぞよろしくお願いします。
(コメント欄にちょっとした追記をすると思います)

回答の条件
  • 1人5回まで
  • 登録:2007/08/03 13:00:39
  • 終了:2007/08/07 09:38:03

ベストアンサー

id:Yota No.2

Yota回答回数453ベストアンサー獲得回数282007/08/03 14:25:46

ポイント40pt

まずMySQLについてですが、OSがUNIX系でMySQLサーバとWEBサーバが同じマシンにある(内部から接続する)という前提で、設定ファイルの[mysqld]にskip-networkingと書くなどして、外部から接続できないようにすることと、間違っても3306番ポートを空けるようなことはしないでください。それとデータベースを設計するときにユーザごとに別テーブルを作って、GRANTによって必要最低限の権限しか与えないなどすればより強固になります。

ログインのパスワードについては、定期的に変えさせるような仕組みを作れば一番いいですがユーザに嫌がられる場合もあるので、もうひとつ全員共通でもいいから、Apacheのdigest認証(盗聴されてもパスワードがばれない)などをかました方が安全だと思います。

PHPについてですが、バグやセキュリティホールによるバージョンアップが多いので適切に対処すること。スクリプトはクロスサイトスクリプティングやSQLインジェクションに対応してあれば、大体大丈夫と思いますが、こういう本で勉強するのもいいと思います。

入門PHPセキュリティ

入門PHPセキュリティ

  • 作者: クリス シフレット
  • 出版社/メーカー: オライリージャパン
  • メディア: 単行本

アプリケーションについてブログの例は知りませんが、この本の掲示板のところが参考になるかもしれません。

今日からつかえるPHP5サンプル集

今日からつかえるPHP5サンプル集

  • 作者: 山田 祥寛
  • 出版社/メーカー: 秀和システム
  • メディア: 単行本

id:tokyosmash

セキュリティに関する情報ありがとうございます。

>Apacheのdigest認証

これは初めて知りました。Pear:Authだと標準でMD5化してDBに保存するようです。また、SSLで通信時は防御しようと思っています。それよりも強固なのでしょうか?Apacheでログイン認証するというのはあまりやった事がありません。


>skip-networking

>3306番ポートを空ける

これはroot権限のみ対処すると考えていいのでしょうか。あくまでroot権限は持たないつもりです。限りなくrootに近い権限は持ちますが、サーバー管理自体は業者に任せるつもりです。


**何かの本で読んだのですが、掲示板を作る際に「フォーム以外からも投稿できるので、それを防がなければならない」といったような事が書いてありました。

これは、受け取ったデータがフォームから書き込まれたものかどうかという事を判別しているんだと思いますが、そういった事を解説しているものは無いでしょうか?

よろしくお願いします。

2007/08/03 16:13:41

その他の回答(2件)

id:KUROX No.1

KUROX回答回数3542ベストアンサー獲得回数1402007/08/03 13:14:47

ポイント10pt

■基本知識

http://www.stackasterisk.jp/tech/php/index.jsp;jsessionid=ax8tm7...

下のほうにあるこの4つ

連載】PHP

スタックアスタリスクの前身サイト ITB-TECHよりの移行記事です。

第1回:PHP基礎 2003/8/29

第2回:PHP中級 2003/8/29

第3回:PHP応用 2003/8/29

PHP基本の基本

■基本サンプル

http://phpspot.net/php/sample.html

■PHP&Pearでデータベース操作

http://phpspot.net/php/pgPHP%81%95Pear%82%C5%83f%81%5B%83%5E%83x...

■掲示板

小さい掲示板のソースを見るのがよい

シンプルで機能がぜんぜんないのを選べばよい

■セッション管理(ログイン関係他)

http://www.stackasterisk.jp/tech/php/php03_06.jsp

id:tokyosmash

情報ありがとうございます。

ただ、もう少し実践的な情報が欲しいです。一般的なPHPの情報は検索すればいくらでも出てきますので、「ブログシステム・掲示板システムを作る」といったテーマに近いものをお願い致します。

2007/08/03 14:20:16
id:Yota No.2

Yota回答回数453ベストアンサー獲得回数282007/08/03 14:25:46ここでベストアンサー

ポイント40pt

まずMySQLについてですが、OSがUNIX系でMySQLサーバとWEBサーバが同じマシンにある(内部から接続する)という前提で、設定ファイルの[mysqld]にskip-networkingと書くなどして、外部から接続できないようにすることと、間違っても3306番ポートを空けるようなことはしないでください。それとデータベースを設計するときにユーザごとに別テーブルを作って、GRANTによって必要最低限の権限しか与えないなどすればより強固になります。

ログインのパスワードについては、定期的に変えさせるような仕組みを作れば一番いいですがユーザに嫌がられる場合もあるので、もうひとつ全員共通でもいいから、Apacheのdigest認証(盗聴されてもパスワードがばれない)などをかました方が安全だと思います。

PHPについてですが、バグやセキュリティホールによるバージョンアップが多いので適切に対処すること。スクリプトはクロスサイトスクリプティングやSQLインジェクションに対応してあれば、大体大丈夫と思いますが、こういう本で勉強するのもいいと思います。

入門PHPセキュリティ

入門PHPセキュリティ

  • 作者: クリス シフレット
  • 出版社/メーカー: オライリージャパン
  • メディア: 単行本

アプリケーションについてブログの例は知りませんが、この本の掲示板のところが参考になるかもしれません。

今日からつかえるPHP5サンプル集

今日からつかえるPHP5サンプル集

  • 作者: 山田 祥寛
  • 出版社/メーカー: 秀和システム
  • メディア: 単行本

id:tokyosmash

セキュリティに関する情報ありがとうございます。

>Apacheのdigest認証

これは初めて知りました。Pear:Authだと標準でMD5化してDBに保存するようです。また、SSLで通信時は防御しようと思っています。それよりも強固なのでしょうか?Apacheでログイン認証するというのはあまりやった事がありません。


>skip-networking

>3306番ポートを空ける

これはroot権限のみ対処すると考えていいのでしょうか。あくまでroot権限は持たないつもりです。限りなくrootに近い権限は持ちますが、サーバー管理自体は業者に任せるつもりです。


**何かの本で読んだのですが、掲示板を作る際に「フォーム以外からも投稿できるので、それを防がなければならない」といったような事が書いてありました。

これは、受け取ったデータがフォームから書き込まれたものかどうかという事を判別しているんだと思いますが、そういった事を解説しているものは無いでしょうか?

よろしくお願いします。

2007/08/03 16:13:41
id:Yota No.3

Yota回答回数453ベストアンサー獲得回数282007/08/03 16:52:17

ポイント40pt

1.ハッシュ化して保存してあっても通信経路にパスワードがそのまま流れてしまうとまずいので、digest認証のようなチャレンジレスポンス方式が有効なのですが、SSL(すべてのパケットが暗号化される)の中でやるならまあそこまで必要ないかなという感じです。

2.MySQLサーバについては、業者に任せるということですので適切に運用されるとしましょう。わたしが言いたかったのは、外部と通信する必要がないのに、ポートが開いていたりすると攻撃にあって大変ということです。

3.

掲示板を作る際に「フォーム以外からも投稿できるので、それを防がなければならない」といったような事が書いてありました。

これは、受け取ったデータがフォームから書き込まれたものかどうかという事を判別しているんだと思いますが、そういった事

これはちょっとわからないです。

id:tokyosmash

3についてですが、例えばwrite.phpにフォームがあってそこで何か書いてもらうとします。そのデータをPOSTでsql.phpに送ってDBに登録するとします。


ところが悪意のあるクラッカーがwrite.phpを介さないで別のドメインから直接sql.phpにデータを送り続けるような事があるので、それを防ぎましょうといった文脈だったと思います。これに関してはまた別の質問を立ち上げますので、もしよろしかったらお願いします。

2007/08/04 05:56:48
  • id:tokyosmash
    基本的なシステムは作れました(投稿・編集・削除)
    ログインはPearのAuthです。


    特に心配なのがセキュリティです。
    基本的なXSS・インジェンクション対策はしております。

    しかしそれ以上の事はまだよくわかっておりません。WEB上で文章を入力してDBの保存するという一連の流れで必要なセキュリティに関する情報も欲しいと思ってます。ブログではないですが掲示板おも「文章入力」という点で似ていると思いますが、PHPの情報が少ないと感じてます。

    何か実践的な情報をお待ちしております。ポイントは頑張ってお支払いさせていただくつもりです!それではみなさんよろしくお願いします。

  • id:Yota
    回答者2です。
    PHPの部分はあまりにも不十分だったような気がするので、思いついたことを加えておきます。
    MySQLログイン情報はスクリプトの中に書かないで、WEBクライアントからアクセスできないディレクトリに外部ファイルとして保存して、スクリプト内でそれををrequireてください。
    それと、ここは一通り読まれたほうがいいと思います。
    http://www.php.net/manual/ja/security.php
    特にerror_reportingのところはよく忘れられる。
  • id:tokyosmash
    >MySQLログイン情報はスクリプトの中に書かないで、WEBクライアントからアクセスできないディレクトリに外部ファイルとして保存して、スクリプト内でそれををrequire

    これは早速実行したいと思います。確かに怖いですよね。エラーログもきちんと残したいと思います。情報ありがとうございました。実践的で勉強になります。
  • id:KUROX
    セキュリティに関しての類似質問
    http://q.hatena.ne.jp/1186175324

    >ただ、もう少し実践的な情報が欲しいです
    そこまでほしいのなら、
    ソース読むか本買うかしかないですけど。

  • id:Yota
    「ところが悪意のあるクラッカーがwrite.phpを介さないで別のドメインから直接sql.phpにデータを送り続けるような事があるので、それを防ぎましょう」
    ただ、そのsql.phpも他のページと同じくSSLによってブロックされたり、ログイン情報を持たない限りアクセスできないわけですよね。
    ログインを破られたのと変わらないのではないでしょうか。
    不正にログインできるのなら、わざわざ別サイトからPOSTやGETを送らなくても、write.phpでやればいいということですよね。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません