08/12/31 06:37:58 wZeU8yq5
>>382
確かにSP3のコードより、何がしたいのか分かりやすい。
まぁ自分が正規表現ちゃんと理解してないだけなんだが...
ところで、このコードがマシな理由としては他にどんな点がある?
速度とか?=== だからとか?
そのあたりも教えてほしいな
384:Trackback(774)
08/12/31 07:59:04 +Q9kCtCQ
>>383
> 確かにSP3のコードより、何がしたいのか分かりやすい。
これって、OSSでソースを書くときにとても重要なこと。
で、なんでそれが重要かというと、
・ソースが現実仕様の実態に沿って書かれていれば正確な動作をしやすい
・他人が読んでチェックしやすい
・新参の開発者に気に入ってもらえて、開発者が増える
その意味では、昔のNucleusはよかった。
最近のNucleusはだめ。
正規表現を使うのは、正規表現でないとわかりにくくなってしまう時だけにすべき。
俺も正規表現苦手だから、\の羅列を見てしばらく考えたからね。
385:Trackback(774)
08/12/31 08:32:27 +Q9kCtCQ
>>383
あ、聞きたいのはそこじゃなかったな。スマソ
現実的な効用というと、sp3のソースや元ソースでの問題点に言及しなきゃ
いかんわけだけど、これを書くと間違いなく、ブログ数ページ分になる。
そのぐらいかけないと、理解してもらうのは難しいんだけど。
俺は別に理解してもらいたいわけじゃないから、はしょって書くとする。
とはいえ、2chでは3行以上書いても読まれないらしいけどw
sp3:
return ((int)$member->getID() == (int)$collectionName);
//整数に変換して比較
オリジナル
return ($member->getID() == $collectionName);
//緩やかな比較
俺のソース
return ( $collectionName === (string) $member->getID());
//メンバーIDを表現する文字列と完全一致するか比較
比較するときは、基本的に、比較の中心側はいじっちゃだめ。
( 以前に騒ぎになったときも、intvalしてから比較してはまったのを
記憶してないか、教訓にできなかったってことだけれども。)
で、そういう基礎的なことを破ってしまうと問題の種が入る。
比較するときにキャストするってことは、キャストでこぼれおちる
「バリ」が「フィルタ」されてきれいな値で比較されてしまう。
これでは、バリデーターとして機能しないわけ。
何が言いたいかというと、たとえば、(int) "1.php" になる。
バリデータの中でそんなことをやってるものがあったら、そりゃ初心者コード
だわな。
ってことで、>>380の言うように、スラッシュを許容してしまったり、複数のフォルダを
育成できてしまったりといった、バグを埋め込んでしまったというのがsp3。
386:Trackback(774)
08/12/31 08:46:33 +Q9kCtCQ
3連投スマソ
でも、ムキになってsp3のソースを生かしたいという奴も出てくるかもね。
>>380の言ってるデグレを生まず、目先の問題を解消するだけなら
if (preg_match('#^[1-9][0-9]+$#',$collectionName))
という風に書き換えればいいって言うかもしれない。
でも、これがまずい理由はある。些細だけれども、他の仕様と絡めた作法の問題。
だから、↑になってる分には誰も文句は言わないだろう。失笑はあるかもしれんが。
387:Trackback(774)
08/12/31 08:49:13 +Q9kCtCQ
oops、正規表現ミスった。+じゃなくて?ね
388:Trackback(774)
08/12/31 09:58:01 wZeU8yq5
>>385
丁寧な説明ありがとー。よくわかった。
他の部分の問題点についても聞きたいんだけど、いい加減スレチ?
389:Trackback(774)
08/12/31 13:14:14 +Q9kCtCQ
スレチ?かどうか知らんが、>>380が指摘したデグレはなぜ起きたか。
それがわかれば、他の部分の問題点? そんなものは取るに足りない。
早い話、全然ダメ。
何がどうだめか? そりゃ長くなるよw
2、3、例を出しとくと、realpath通したら仕様が制約される。
バリデータの中で引数に代入すんなよ、とか。
てかそもそもディレクトリトラバーサル対策ってそれ?みたいな。
でも、理由を知らなくていいなら、正しいコードは簡単。
getCollectionListで取得する配列のキーと照合すればいい。
もし、getCollectionListで取得できるキーの中にinvalidになるべきもの
が含まれるなら、それはgetCollectionListのバグもしくは仕様の不備。
1対1で照合できるべき。
390:Trackback(774)
08/12/31 16:11:55 K9+ABug9
>>366で
> 3.31sp3では 「実在する他ユーザーのディレクトリにアップできる」
> って仕様に変わったのかもしれませんね。
これってまさか、仕様じゃないよね?皮肉だよね??
391:Trackback(774)
08/12/31 16:38:51 TiikAIsz
> てかそもそもディレクトリトラバーサル対策ってそれ?みたいな。
それはちょっと言い過ぎ
「ディレクトリトラバーサル php」 で検索するとそんな感じのコードが出てくるし。
がんばってコピペした感じが微笑ましいよ
392:Trackback(774)
08/12/31 20:00:12 +Q9kCtCQ
どうも、勘違いされてノイズが増えるのもツマランな。
俺は聞かれれば答えはするし、ダメなものはダメという。
しかし、何かの意図があるわけじゃない。
どんなプログラムを配布しても自由なんで、sp3、大いに結構なんではないかと。
393:114 orz
09/01/01 02:22:16 RgKMu6pC
>>389
realpath 通したら仕様が制約される、ってのはなぜ?
Nuc ってもともと collectionName って階層構造を持たない
フォルダって仕様なんだっけ?
もしそうならわざわざ realpath じゃなくて、basename 使って
チェックすればいいのかな?
う~ん、それだと結局仕様を限定することになるから一緒?
それとも strstr で .. が含まれてたらエラーにしたらいいのか?
まぁ確かにこの場合 getColllectionList 云々方式が簡単そうだ。
394:Trackback(774)
09/01/01 09:18:41 30ZGKnNG
> realpath 通したら仕様が制約される、ってのはなぜ?
理由1:symlinkを展開してしまう。
URLリンク(jp.php.net)
サーバ管理者にとってsymlinkを使って管理しやすくするというのは最も手軽な手段の一つ
symlinkで外部ディレクトリを利用できるようにするという管理方法が制限されてしまう。
理由2:不正な文字列でもinvalidにならない
collectionはシステムから提供される選択肢から選ばれるものであって
ユーザーの任意入力による自由なパラメーターではない。
「3/../3」は不正な文字列であってinvalidでなければならないが、
realpathを通すとvalidになる。
"対策コード"っていうと攻撃できなきゃいいじゃんって思うわけだよね。
だから、場当たり的なコードになって読みにくくなる。
正しく実装すれば防げるものであれば正しく実装すりゃいいじゃんっと思う。
395:Trackback(774)
09/01/01 10:31:38 9oUd2lik
URLリンク(japan.nucleuscms.org)
こんなこと書いてる暇あったら、とりあえずマニュアル読めとw
URLリンク(www.php.net)
URLリンク(www.php.net)
URLリンク(www.php.net)
396:Trackback(774)
09/01/01 11:27:43 9oUd2lik
NP_Mediatocのv1.1
相変わらず、他人のメディアを削除とかリネームとか可能なんだけど。
俺がちら見してわかるのに、作者以外はチェックしないってことなの?
てか、テストとか書かないのかな。
397:Trackback(774)
09/01/01 17:42:31 30ZGKnNG
それを報告しない理由はなに?(報告済みならゴメ)
俺の場合は、設計レベルの問題を解消しなきゃ意味ないから
細かい修正点をあげつらうのは自分に反するからなんだけど。
# まぁ、釣られれば書いちゃうんだけどね
398:Trackback(774)
09/01/02 05:36:28 jsFDLl+G
>>396
NP_Mediatocuね。
おれが見たところだと、
コアと同じようにメディアディレクトリ直下にゴミを量産できるってのはあるにしても、
そのほかは、不正な動きはできないような気がするけどどう?
どんなパラメーターで問題が生じるの?
実際にインスコしてみたら、うちの環境だとディレクトリ作れないから
正常動作してるとも言えないんだけど。
環境の問題かどうかチェックしてるところ。
399:Trackback(774)
09/01/02 09:21:16 zngzDZ5k
プッ
てか、コアでもNP_Mediatocでも、アップロード権限さえあれば全権とれるしww
400:Trackback(774)
09/01/02 10:18:43 jsFDLl+G
正月早々、草ww
> アップロード権限さえあれば全権とれるし
うちのサーバなら無理だと思うよ。
media.phpはCGIでSUEXEC実行させてユーザー毎に権限分けてるし
メディアディレクトリからのスクリプト実行ができないように設定してるから。
Nucleusで多人数用サービスを利用しているところでは、
この方法でセッティングしてあるところがいくつかある。
頼まれて俺がやっただけでも10件以上はやってる。
教えてやっただけのもあるし。
symlink使ってるから、今度のアップデートを使わないことを祈るよ。
継続サポート契約はしてないところがあるからね。
401:Trackback(774)
09/01/02 13:13:21 tg5q4j1S
何が起こっているのかよくわからない俺ガイル
402:Trackback(774)
09/01/02 13:16:04 7Q2xdVzj
>>399
要するにスクリプト実行できるってことだよね
>>400みたいにサーバー設定で回避するのが基本だけどへたれレンサバの場合は
自分でスクリプト改造するしかないかな。ファイル名チェックに制約を加えればいいはず
あ、でもディレクトリを悪用されるとだめか
鯖管なら基礎知識なんだけど、ほんとメディアはめんどい
403:Trackback(774)
09/01/02 13:52:16 gD1cO9me
あけおめ。
俺がNucleusを使い始めてから4年か・・・
当時はそこそにバージョンアップされてた(もう何回もアップデートした記憶がある)し、プラグインも豊富だったが、
今ではバージョンアップもずいぶんと前からされてないし、かつて人気を集めていたプラグインはいつのまにかWebの藻くずとして消え去り、時代もWordPress一色。
あぁ、なんでNucleusなんて選んじまったんだろう。
404:Trackback(774)
09/01/02 15:38:16 Nqups6eV
nucleusってそんな使いにくいか?
まぁ何をするかによるけど、ブログとサイトしか作ってない俺は不便してない。
405:Trackback(774)
09/01/02 15:39:43 k0uzUYjl
>>403
Nucを見限ったのだったら、MT形式で書き出してWordPressで
インポートすればいいじゃん。Drupalに移行したかったら、
WordPressでさらにナントカ固有形式で書き出し、
WpDrupalマイグレーションツールを使えばいい。
データが命なのであって、それを表現するCMSは乗り換え可能。
WordPressもDrupalも永続はせず、いずれまた他のCMSが台頭し
捨てられる運命にある。だから拘ることなんかないよ。
406:Trackback(774)
09/01/02 16:34:29 RcP6hUSS
MT形式でエクスポートしたいのはやまやまなんだけど、
薦められるがままに使ったプラグインで保存されてる
関連データが抽出できないんだよね。
それで塩漬けでいいやってことに。
つうわけで、アップグレードしないNucサイトが一つ。
407:Trackback(774)
09/01/02 16:52:09 3hk4V8ih
廃坑後の街にただよう亡霊 -セキュ厨- を退治、浄化せんとする死神開発者たち
初戦はバグ量産の末にあえなく敗退。今後を占う第2戦の行方はいかに。
408:Trackback(774)
09/01/02 19:15:44 C9ejSnHj
>>406
同意。
結局は、一番更新頻度が低いプラグインに引っ張られるわけで・・・。
更新頻度の高いor高そうな人気プラグインを使っておくのが
長い目でみてベターだと思ってるんだけど、みんなはどう?その場その場?
409:Trackback(774)
09/01/02 19:27:16 SbOfsPLW
更新頻度も人気も当てにはならないという歴史がある。
ワンマンで作られたものより、複数の人が手を入れてるものがいいと思う。
410:Trackback(774)
09/01/02 21:30:31 jsFDLl+G
亡霊かよ