ja en ja fr ja ja ja ja zh ja ja ja ja ja ja ja ja en ja ja ja ja ja ja ja ja ja ja ja ja ja en ja ja en ja ja ja ja ja en es en es pt ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja en ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja zh ja ja ja ja ja ja ja ru ja ja ja en
idea * idea CakePHP修行 に重大なセキュリティホールが! : akiyan.com
久しぶりのi d e a * i d e a CakePHP修行! への返信です。
画像のアップロード処理をつくる【I】(CakePHP修行 #26) | i d e a * i d e aより。
現状では書けません。この話題についてはCakePHPでDBに関連しないパラメータはヘルパーで書くべきか? (Re:CakePHP修行! | idea*idea) : akiyan.comをどうぞ。
しかし重大なセキュリティーホールが
しかし、このアップロード処理のコードには重大なセキュリティホールがあります。このセキュリティホールを利用すると任意のコードを実行できてしまいます。原因は、アップロードされたファイルの拡張子を変えずにDocumentRootの下に移動しているからです。
$ext = strtolower(preg_replace("!.*\.!", null, $this->data['User']['pic']['name'])); $filename = sprintf("%05d.%s",$this->User->id, $ext); move_uploaded_file($this->data['User']['pic']['tmp_name'], APP."webroot/pics".DS.$filename); $this->data['User']['pic'] = $filename;
攻撃用のコードを含んだ「attack.php」や「getcookie.html」といったファイルをアップロードされてしまった場合、phpであれば中身がそのまま実行され、htmlであれば埋め込まれたJavaScriptが動作してしまいます。要するに「何でもアップローダー」になってしまっているのですね。
このエントリを書いている時点の最新のコード(画像のアップロード処理をつくる【III】(CakePHP修行 #31) | i d e a * i d e a)ではファイルを移動せずにgd関数で画像を出力するようになりましたが、以前としてファイル名がそのままなので画像データに細工を施せば何らかのコードを埋め込むことができます。詳しくは画像へのPHPコマンド挿入 - T.Teradaの日記をどうぞ。
解決策の一つとして、アップロードされたファイルの画像形式を調べて、その形式にあった拡張子に変更してpicsディレクトリに配置することです。画像でなければアップロード処理はキャンセルしてしまいましょう。
ファイルというのは「ユーザーからのとても大きな入力値」ですので、普段の入力値と同じように入力値チェックやエスケープが必要です。今回の解決策として例示した拡張子の変更は、エスケープ処理のファイル版といえます。
皆さんもファイルのアップロード処理を実装する場合は、十分に注意して開発しましょう :)
カテゴリ:ホーム » ブログ » IT » プログラミング » idea * idea CakePHP修行 に重大なセキュリティホールが!
前の記事:ここはおさえておきたい,CakePHP情報サイトリンク集
後の記事:わかりやすさ優先でもいい – idea * idea CakePHP修行への返信
コメント / トラックバック
コメント / トラックバック 2 件
画像アップロード処理のセキュリティホールをふさぐ(CakePHP修行 #37) - IDEA*IDEA ~ 百式管理人のライフハックブログ より:
2009-08-04 15:14
[...] さてさてCakePHP修行。青い人に指摘されたセキュリティホールを防ぎます。 [...]
いろいろ細かい調整やら修正やら(CakePHP修行 #36) - IDEA*IDEA ~ 百式管理人のライフハックブログ より:
2009-08-04 15:15
[...] さてCakePHP修行。ひさびさに青い人に添削してもらいました。うれしす。ありがとう! [...]
akiyan.com とは
個人サイト。管理人は秋田真宏。ニックネームは「akiyan」。
「今までの認識を覆(くつがえ)す、わかりやすい記事を書く」ことを目標にしているサイトです。話題の中心は生活とウェブ技術系です。
UberEATSの配達員をリリース当日にやってみた
iPhone の修理補償のためにAppleCare+や携行品保険に入ってはいけない
UR賃貸住宅が最強なことを惜しみなく紹介
あなたの知らない照明術
ためしてガッテンのカレー特集がすごい!
5泊5000円台の貸しふとんで、お客様用ふとんを持たない暮らし
ブログカテゴリ・月別一覧
エンターテイメント (199)
ビジネス・政治経済 (175)
生活・ライフスタイル (246)
2022-09-14 海岸や河川でバーベキューができるか調べる方法
2022-02-02 SequelizeでJSONフィールドをupdateする場合はsetメソッドを使う
2022-01-24 SwitchBotロックをSiriショートカットで「解錠」はできない
2022-01-04 テスラモデル3にTPMSセンサー無しで社外品ホイールとスタッドレスタイヤ を取り付けました
2022-01-01 サーフィンを始めました
2022-01-01 テスラモデル3ロングレンジに乗り換えたらアプデが楽しみになった
2021-12-29 歯列矯正を始めてからよく食べてるもの、完全食、フリーズドライお粥、豆腐 etc
2021-12-28 日光市ワーケーション補助金は最低1名から、申請はメールでOK
2021-11-19 2021年に買ってよかったもの
2021-08-12 自治体コロナワクチン予約は早朝チェックで最速で受けられる
akiyan.com 管理人メモ
自衛隊イラク日報 バグダッド日誌/バスラ日誌 一覧
エンコードマニアックス
オンラインCSS自動整形
はてなブックマーク人気エントリー
Copyright 1997,2022 akiyan.com, All rights reserved.