Monthly Archives: 9月 2008
register_globalsについて
前々からregister_globalsはoffにすべきというのは
知っていたのですが、プログラマーになって
具体的にというか本気で困ることに気がついた。
そもそもregister_globalsがonだと、何ができるのかというと、
http://a.com/?mode=bbb
にアクセスした場合、簡単に書くと、
if ( $_GET["mode"] == “bbb” ){
echo “test”;
}
みたいな感じでGETの値を使う訳ですが、
register_globalsがonだと
if ( $mode == “bbb” ){
echo “test”;
}
でも同じように通ってしまうわけですね。
$_GETとか$_POSTのような特殊変数じゃなくても
値が入ってしまうわけです。
これってミスの元になるし、脆弱性にもなりえますね。
自分の意思で変更できる環境なら、やっぱり変更するべしですね。
## でも、事前検証は確実・十分に!
VirtualDocumentRootの続き
以前VirtualDocumentRootのことについて書きましたが、
そもそも何をしたかったかというと、
test.com等の特定のドメインの場合には、VirtualHostを有効に。
aaa.test.com のように普通のサブドメインの場合は、
毎回VirtualHostを設定しなくていいようにVirtualDocumentRootを。
というような入り組んだ仕組みにしたかったわけです。
一部特殊な設定をしているサブドメインなどがあるので、
全部をVirtualDocumentRootにできなかったので、探してました。
で、いろいろなサイトを参考にして、結論としては、以下のようになってます。
## デフォルトの設定
ServerName local
ServerAdmin hara@dedede.net
VirtualDocumentRoot /home/%2+/%1
## 特殊な設定をする場合
ServerName aaa.test.com
ServerAdmin hara@dedede.net
DocumentRoot /home/aaa/test.com
・
・
・
・
この場合には、VirtualHostの中のServerNameに
アクセスされているホスト名がなければ、
自動で一番最初のVirtualHostの設定をよみ、
VirtualDocumentRootが実行されるようです。
こんな感じで、VirtualHostとVirtualDocumentRootが共存できました。
いいっすね。
こういう楽ができる技術は最高です。
MySQLの型と自動補完について
PHP & PearのDB.php でプレースホルダを使う。
書籍をちゃんと読めばよかったんだけど、
ちょっと前にはまったことをメモしておく。
phpでDBを扱うときにプレースホルダを使うわけですが、
プレースホルダを利用した時点で、エスケープ処理がされるわけなんです。
が、それを勘違いしまして、
mysql_real_escape_stringしたわけですよ。
そしたら、やっぱり↓みたいのがでましたね。
Warning: mysql_real_escape_string(): Access denied for user: ‘aaaa@localhost’ (Using password: NO) in aaa.php on line 384
Warning: mysql_real_escape_string(): A link to the server could not be established in aaa.php on line 384
まあ、エラーの内容はちょっと変ることもあるだろうけど、
僕がしくじった時はこんなんがでてました。
ようするに、2重でエスケープ処理してまったって話ですね。
ちなみにプレースホルダってのは、↓みたいなのですね。
$options = array(“test”, “hogemoge.com”, “bbb@hogemoge.com”);
$sql = “select colm from tablename where name = ? AND domain = ? AND email = ? “;
$aaa = $db->query($sql, $options);
$sqlに代入してるSQL文に『?』が3つあるわけですが、
$options配列に入っている内容も3つあります。
各々エスケープ処理されて、『?』のところに充当されるわけですね。
というわけで、phpではプレースホルダすれば、エスケープ処理いらないよというお話でした。
Macで仮想化環境使いたい
Macで仮想化環境使いたくて。。。
一般的には、BootcampとかParallelsなんですけど、
Bootcampは複数OS並行して起動できない?
Parallelsは、有償ということで、断念。
そこで無償でWindowsのVMwareみたいに利用できるVirtualBoxを
ためしてます。
インストールとかは、そこそこうまくいきました。
というところで、気がむいたら、また続きを書きます。
さっそくだけどVirtualDocumentRootについて
Apache関係に限らず、技術系で細かい事をしようと思うと、
手元に資料がないとはまります。単純に理解が足りないだけだけど・・
VirtualDocumentRootを利用して、自動でフォルダ判別したいんだけど、
ドメインでフォルダほって、その下にサブドメイン名のフォルダをほる。
これでわけたかったわけだけど、四苦八苦した。
sub.domain.comというのがあったとしたら、
DocumentRootを /home/domain.com/sub
としたかったわけです。
%0 = sub.domain.com
%1 = sub
%2 = domain
%3 = com
なわけなので、↓で試したわけです。
VirtualDocumentRoot /home/%2.%3/%1
としてみたわけですけど、apachectl configtestでエラーになりますわな。
エラー内容としては、
syntax error in format string
となるわけです。
で、焦ってしまったわけです。
焦った状態で次に試したのが、↓
VirtualDocumentRoot /home/%2.3/%1
apachectlは問題なく通るわけですが、これもエラーになりますわな。
エラーとしては、404エラーなわけです。
エラーログでは、
File does not exist: /home/m
がでます。
理由としては、%2の3文字目という事で、
%2 = domain
でいうところの 『m』という文字になるわけですね。
で、実際の処理としては、
DocumentRoot /home/m/sub
という意味わからんことになってしまってるわけです。
で、答えは、
VirtualDocumentRoot /home/%2+/%1
でした。
%2 の後に 『+』をつけることで、%2以降全てになるようだ。
httpd.confとかいじるときは、手元にApache関連の本が必要だなと実感しました。
ググッても詳しいのが見当たらなかった。
はじめようと思う。
デザイン等のもろもろは後から対応するとして、
とりあえず技術系のネタをベースにしたログを残していこうと思う。
どれだけ続くことやら。
興味がある人は、たま~に見てやってください。