掲示板
訳あって、ApacheとPHPとMySQLの勉強をはじめました。
で、勉強に使っていた書籍の巻末に、総まとめとして簡単な掲示板の作り方みたいなのが載っていたのですが、「これくらい作ればイントラネット内の身内用としてなら使えるね」見たいな事が書かれていたので、じゃあ、どこまでセキュリティを高めればインターネットで公開できるのかなあと、疑問に思ったので調べて修正をしてみました。
・参考にしたサイト
http://kan-chan.stbbs.net/download/cgi/tutorial/cgihole.html
http://d.hatena.ne.jp/Kazumi007/20090921/1253501500
http://www.tagindex.com/html_tag/form/form_action.html
・とりあえず現状の掲示板の仕様(見本どおり)
- フォームに入力された値 はhtmlspecialchars()を使ってタグ無効化
- フォームの入力データは一応チェックしている
- データベースのユーザー名とパスは別ファイル
- フォームとphpとのデータのやり取りは全部method=getを利用
大体こんなところ。
・今回やった修正
method=getからmethod=postを使ってデータを送信するようにした。
言うてもサンプルコードなのでいろいろと欠陥はあるわけなのですが、とりわけ、メッセージの投稿やスレ立てが更新ボタンを連打すると複製が無限にできてしまうのがやべーなと思ったので、そこから手を付けてみました。
そもそもmethod=getとmethod=postの違いがわからなかったのでそこから。
- method=get 送信データがURLの一部として送信される。
送信データとURLは ? で区切られる。
URL自体に長さ制限があるので、大容量のデータは
送信できない場合も(環境による)。
- method=post サーバ側から標準入出力経由で送信される。
こちらは本文としてデータが送信されるので大容量のデータが
送信可能。
掲示板とかメールフォームではpost、検索エンジンではget。
・結果
method=postでも更新ボタンを押すと、フォームの再送信が行われてしまい多重投稿できてしまった。ネットショップのレジとかだと、リロードすると無効になってくれてた気がするんだけどあれってどうやるんだろ。