最新エントリ
2005/09/22
|
カテゴリ : PHPメモ
執筆者:
itoh (11:43 pm) |
HTML_QuickForm_Controller結構使い込んだけど。 ActionFormなフレームワークが使える環境なら使うことはないかな。 Strictな状況で考えた場合、下記の理由で結構使えない。 ・セッションを使うからCookieが使えないユーザ(携帯)を考慮しなければならないケース ・headerで飛ばしているのでリダイレクトが禁止されているケース ・PEARのバージョンが上がってしまった場合、唐突に使えなくなる(経験あり) ELF上鍵さんはControllerを自作してCookie&headerに頼らないものを作りかけたということだけど、私はそこまでやる気も無く・・・。というか、QFCはソースが読みにくいことこの上なくて。 あと、どうもバグくさい動きが散見されるのが気になる。値が入ってないこととかあるのだけど、これもソースを見てもさっぱりわからないので、結構諦めるハメになっている。 それと、フォームの追加が面倒。radioボタンとか何回使っても覚えられない。それに比べるとActionFormはどのフォームエレメントを使っても同じ記述方法で良いので楽だ。 (テンプレート側でちょっとアレなこともあるけど) 一言で言うと 「型にハマったときは強力だが、バグにハマったときに脱出方法が無い」 という感じ。Javascriptによる自動検証なんて良く出来ていて好きなんだけどなー。 |
2005/08/31
|
カテゴリ : PHPメモ
執筆者:
itoh (6:25 pm) |
N-gram全文検索システムRastをPHPから使えるようにしてみる。(MacOSX 10.3.9) とりあえず、Rastをインストール。 気持ちが先走ってphp_rastを入れようとしてmakeで大量のerorrを出したことは内緒だ ってなるので、aprをインストール。finkは便利だ。 となると、例によって自動インストールしてくれる。 また、rast-0.2.0ディレクトリで./configureすると、、 apr-configは通ったけど、libdbが無いと言われた。 finkのリストを見ると、libdbiがあるので、これかな? んー、ダメみたい。 Rastのページを見たら 引用: FreeBSD の場合は ./configure 時に以下のようにしてください. ってあった。MacOSXはBSD系なので・・・・と思ってみたら、db42は既にインストール済みだった。 ちょっと迷ったが、 でコンパイルは通ったみたい。 make[1]: Nothing to be done for `all-am'.とかでるが、まぁ放っておく。 で、php_rastのインストール Rastがインストールされてれば http://a157.debian.co.jp/php_rast/readme.ja の通りにインストール完了。 あとは、php.iniに extension=/usr/lib/php/extensions/no-debug-non-zts-20020429/rast.so を書いて、apache restart。phpinfo();を見ると、 となって、成功。 |
2005/08/25
|
カテゴリ : PHPメモ
執筆者:
itoh (3:31 am) |
3日ほどまとまった時間が取れたので、初めてのフレームワーク(Ethna)を使ってごにょごにょしてみた。 感想は・・・・ すげぇ それがhaltさん曰くの「最強のPHPフレームワーク」だからかはわからないけど、なんというかコードを書く時間が少ない。O/Rマッパー便利過ぎ。感動モンです。これがMVCプログラムといわれるものか。(私はModelは今のところPEARしか使ってないけど )多分、Ethnaの全機能の10%くらいしか使ってない気はする。メールも投げたいし、ファイルアップロードもまだこれから試すし。 でも逆に、私が最初から「プログラムはこう組むものだ」とこれを教えられていたら「つまんねー」とか感じたと思う。私がちゃんとプログラムに取り組みだしたのはPHPだし、その時は<? phpinfo(); ?>で喜んでたし。そっから配列覚えて関数覚えてクラス覚えてって・・・・それが全部楽しかったという経験があっての感動だろうなぁこれは。 そして感じたのは、「設計が大切」ということ。 なんか、コードを書く時間は減ったけど、全体のスピードが遅いのは「次何しよう?」って考えているから。慣れもあるとは思うけど、キーボードから手を離してうんうん唸ってる時間。 |
2005/08/04
|
カテゴリ : PHPメモ
執筆者:
itoh (5:05 pm) |
CSRF対策のチケットを破る方法。 ようするに、チケットキーを奪ってしまえばいいのだから・・・。 を含むサイトへのリンクを貼って。 1. クリックすると、HTMLを読み込んだ時点で、1ページ目を取る。 2. get_ticket()は標的サイトの1ページ目をパースしてXML-Object化。XMLにはticketが含まれている。 3. dummy.pngは読み込みに5秒ほど掛かるダミー画像で、それを読み込んだ時にget_ticket()で作ったXML-Objectのticketを組み合わせてtarget_do()で攻撃。 というか、勝手に通信されるAjax(と呼ばれる一連の技術)は勝手に何かされそうで非常に怖いと感じるのだけど。Javascriptを読み込んだ時点で、自分のCookieを使って勝手に通信されるということだから。 これって認証系サイトでは防ぎようがない・・・・・んじゃないか? チケットといっても、チケットを買いにくる人が悪人だったらどうするのっていう話で。 少なくとも、ユーザが自分で ・ログイン中は外部サイトに行かない ・外部サイトに行く時はしっかりログアウトしてオートログインはやらない と決めないとマズそうだ。 これをサイト運営側で対応するとしたら、外部サイトへのリンクはログアウト処理を噛ます。という方法か。でもそれって、「面倒!」とか言うユーザーが大半だろう。 かつ、セッションライフタイムを極端に短くするとか。でもそうすると、ユーザーは「すぐログインを求められる!」って怒りだしそうだ。 Ajax使ってるエンジニアが「最近はJavascriptだけで何でもできそうな気がします」と言ってたけど、どうする?銀行系サイト。 自分で実験してみるかな。 |
2005/07/28
|
カテゴリ : PHPメモ
執筆者:
itoh (9:59 pm) |
UTF-8で送信するのが推奨されているトラックバック送信だけど、実際にはEUC-JPで送られてきていたりすることもある。 で、自動判定をしようとするわけだけど、短い文章だとどうしても失敗する。 「美乳」とか文字コードの指標を入れる訳にもいかず、どうしようかなと。 http://blog.bulknews.net/cookbook/blosxom/trackback/tb_send.html によると、POSTの変数値として'charset'を入れることもあるそうだ。 あと、PEARのNet_Trackbackでは、 してるから、$_SERVER['CONTENT_TYPE']から頑張れば抜き出せる。 ちなみに、PEAR::Services_Trackbackではとくにcharsetは考えられていない。 http://pear.php.net/package/Services_Trackback/ この辺は、文字コードの判別を苦にしている日本人が造ったかそうでないかの差か? まぁ、ちょっとでも可能性がありそうでしたら探ってみるのも手ですね。 |
2005/07/18
|
カテゴリ : PHPメモ
執筆者:
itoh (1:20 am) |
[ampsec]より http://www.hardened-php.net/index.36.html (u.uid=1 && (conv(substring(u.pass, 1, 1),16,10)&8))を考えるメモ。 (こういうのノートに書きながらじゃないと理解しないのと、あとで見直すときにブログにあると楽なのでココでメモ。じゃあプライベート設定しろよと言う話) 色々分からなかった点について考察 ?・進数を10に合わせてビット積を取る理由 conv(substring(u.pass, 1, 1),16,10)&8ね。 u.passの最初の1文字を取ってきて、16進数→10進数にして8との論理積。 なんで、convするのかなー、と思った。'8'は、10進数と16進数で意味が違うのか?いや、一緒だ。だから、1文字目が0〜9の値であったなら進数を合わせる必要は無い。 だけど、abcdefだった場合は、10進数にはそれらの値が無いのでビット積が適応できない →ということは、MySQLのビット積演算子は両辺とも10進数をデフォルトの引数としているのか? →というか、普通はそうか。 →mysql> select 1&'a' とかしてみたら、0が帰ってきた。これはキャストしてるのかな? ?1桁を試すのに1,2,4,8の4回でいい理由 これは、下記のように一覧を書いてみたらすぐ分かった。文言化すると 「md5 hash値は1桁が0-fまでの16種類(=4bit)なので、各ビットを立てたものとのビット積をとれば、その4階のbit和でわかる」ということかな。 →もし、md5が0-vまでの5bitの値を取る場合、1/2/4/8/16の5回やればオッケー。 ?ORDER BY句で論理積を取っていること これは、 (conv(substring(u.pass, 1, 1),16,10)&8)だけだと、「登録されている全てのユーザの4bit目を判定している。」になっちゃって、uid=1のユーザの判定をする為。 この論理積を取った結果、uid=1の結果に合わせてuid=1の属性をもった結果が「浮いてくる」(もしくは沈んでくる)。 なるほど、SQL Injectionで不正な値を入れるだけではなく透過して見れるということか。 |
2005/07/16
|
カテゴリ : PHPメモ
執筆者:
itoh (11:50 pm) |
ELF上鍵さん主宰の勉強会 http://elf.no-ip.org/modules/eguide/reserved.php?eid=2 PHPカンファレンスとか、XOOPSイベントとかの100名単位でのイベントに出席したことはあったのだけど、こういう小さいのは初めて。しかも、参加者一覧を見ると著名な人がいっぱいいてややビビり入ってたり。 ビートクラフトの小山さんと話せたのが面白かったなー。 ・evalはpreg_replaceでも実務で使ったことが無い(ほへー、XOOPS使いまくり )・ajax/flexはフロントとバックエンドの分離の先駆け むー。お話しするだけでもモチベーション上がるデス。 ライターの伴さん (相変わらずのエンジニア不足なのに無職者が増えるのは不思議だと言った私に) ・それは、君がまだ世の中を知らないからだよ。 むへー、若造です。 アシアルの田中さん。まだ24歳なのに社員10名を抱えてるってスゴいです。 TRUST BEEの山本さん、いつの間にかほぼSoftagencyの中の人になりつつも、バンコクで起業とはバイタリティあり過ぎです。 PHPの勉強内容以上に、大切なことを感じられた・・と思う。 さー、勉強、勉強。 |
2005/07/07
|
カテゴリ : PHPメモ
執筆者:
itoh (3:25 pm) |
CSRFについて、高木先生が書いていた内容。 http://takagi-hiromitsu.jp/diary/20050427.html 「不適切な解説の例」というところが興味深いのだけど。 引用:
なんでそれが間違った解説なのかっていうのがなかなか頭に入りづらい。 こう見た瞬間に「あぁ、そうですね」と咀嚼ならないのだ。 この辺はセンスの問題で、残念ながら私にはそのセンスはないのだろう。 もう一つ考えられる理由に、セキュリティは「攻撃ありき」でその攻撃方法の具体的な手段を知らないといけないのだが、それはおいそれと教えてもらえないので、自分で攻撃手段を考えないといけない。 それができないままセキュリティの勉強を進めても、実体が無いものと格闘するだけで、まさに「霞を斬る」闘いにしかならない。この辺、数学とか量子力学を想起させる。あれらも結局観念でしかなくて、実体はない。勉強してて、リアルに想像できないからすごい疲れた。疲れるってコトはセンス無いんだと思ってそれ以上はあきらめたんだけど。 プログラムもセンス無いんだなぁと思うんだけど、食ってかなきゃならないしね。 というわけで、Javascriptを覚えようかと思ってる次第。 |
2005/07/04
|
カテゴリ : PHPメモ
執筆者:
itoh (12:04 pm) |
[PHP-users 24875]で見て、ずっと気になっていたのだけど。 要するに、配列の要素へのリファレンスを「作っただけ」で変数の値が変わってしまう。というコト。 で、大垣さんのWikiで、 引用:
だって。まぁ、しゃーないかなって感じですね。 ![]() |
2005/07/04
|
カテゴリ : PHPメモ
執筆者:
itoh (11:29 am) |
引用: >> http://www.thinkit.co.jp/free/compare/2/2/1.html つっこむところは、そこと違うと思うぞ。 パフォーマンス比較を 引用:
でやってるからだと思うぞ。 PHPと他言語の比較は、大垣さんのブログでも見たけど、なかなか難しいけど、ハードウェアなら同じ土俵なんで、(メモリ管理などの差はあるにせよ)さほど違いは出ないと思うんだけど。 |
)
