アカウント名:
パスワード:
認証無視で管理者権限アカウントとか脆弱性ってより裏仕様のバックドアばれちゃったみたいなはなしですね
本当にバグだったんだろうか
オンラインでソースが見られないのでよくわかりませんが、本家のアナウンスを見ると
The 'realname' parameter is not correctly filtered on user account creation, which could lead to user data override.
とあるので、「realname」というパラメータの入力値のチェック漏れでSQLインジェクションか何かを許してしていたのではないでしょうか。普通の脆弱性ではないかと。
高木センセーの仰ってる通り、サニタイズとかじゃなくてパラメータライズドクエリを使え、と。こんなメジャーなシステムでそんな初歩的なミスをしていたなんて、ちょっと驚きですね。
#ふと思ったんですが、プリペアドステートメントとパラメータライズドクエリ、どっちがメジャーな呼び方なんでしょうかね。
プリペアードステートメント … 埋め込む概念や方式のこと。プレースホルダ … 埋込む箇所のこと。パラメータライズクエリ … プリペアードステートメントで作られたと保障されるクエリそのもの(最終的な形)。
少なくとも「プレースホルダ」と「プリペアドステートメント」の概念は、PHPのドキュメントでは、そう区別されています。http://php.net/manual/ja/pdo.prepared-statements.php [php.net]>より成熟したデータベースの多くは、プリペアドステートメントという 概念をサポートしています。>(略)>この例は、name および value を名前つきプレースホルダで置き換えて INSERT クエリを実行します。
上記ドキュメントを使わせてもらうと"INSERT INTO REGISTRY (name, value) VALUES (:name, :value)" … プリペアードステートメント:name や :value …… プレースホルダ$stmt->prepare()を利用したexecute();によって発行される "INSERT INTO REGISTRY (name, value) VALUES ('one', 1)" … パラメータライズクエリ(かな?)
こういうものだと私は思ってました。
プリペアードステートメント - mysqlだと準備済みステートメントと訳されてますね。PREPARE構文で事前に準備されたステートメント(SQL文)を表すと思います。プレースホルダを含まなくてもPREPARE構文使えばプリペアードステートメントでしょう。
プレースホルダ - 場所といえば場所だけど、転じて「?」を表す語となってることも多いと思う。マニュアル的にはパラメータマーカという方が多いみたい。パラメータマーカ→DBで使ってる、プレースホルダー→より一般的な言い方、といったところ?
パラメタライズドクエリ - パラメータマーカを含むプリペアードステートメントを実際に用いて行うクエリ。具体的にはパラメータ付きのEXECUTE構文、またはその準備を含む一連の行為を意味する、ってところ?
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
「科学者は100%安全だと保証できないものは動かしてはならない」、科学者「えっ」、プログラマ「えっ」
バックドア? (スコア:0)
認証無視で管理者権限アカウントとか
脆弱性ってより裏仕様の
バックドアばれちゃったみたいなはなしですね
本当にバグだったんだろうか
Re: (スコア:4, 参考になる)
オンラインでソースが見られないのでよくわかりませんが、本家のアナウンスを見ると
The 'realname' parameter is not correctly filtered on user account creation, which could lead to user data override.
とあるので、「realname」というパラメータの入力値のチェック漏れでSQLインジェクションか何かを許してしていたのではないでしょうか。
普通の脆弱性ではないかと。
Re: (スコア:2, 興味深い)
高木センセーの仰ってる通り、サニタイズとかじゃなくてパラメータライズドクエリを使え、と。
こんなメジャーなシステムでそんな初歩的なミスをしていたなんて、ちょっと驚きですね。
#ふと思ったんですが、プリペアドステートメントとパラメータライズドクエリ、どっちがメジャーな呼び方なんでしょうかね。
Re:バックドア? (スコア:4, 参考になる)
プリペアードステートメント … 埋め込む概念や方式のこと。
プレースホルダ … 埋込む箇所のこと。
パラメータライズクエリ … プリペアードステートメントで作られたと保障されるクエリそのもの(最終的な形)。
少なくとも「プレースホルダ」と「プリペアドステートメント」の概念は、
PHPのドキュメントでは、そう区別されています。
http://php.net/manual/ja/pdo.prepared-statements.php [php.net]
>より成熟したデータベースの多くは、プリペアドステートメントという 概念をサポートしています。
>(略)
>この例は、name および value を名前つきプレースホルダで置き換えて INSERT クエリを実行します。
上記ドキュメントを使わせてもらうと
"INSERT INTO REGISTRY (name, value) VALUES (:name, :value)" … プリペアードステートメント
:name や :value …… プレースホルダ
$stmt->prepare()を利用したexecute();によって発行される "INSERT INTO REGISTRY (name, value) VALUES ('one', 1)" … パラメータライズクエリ(かな?)
こういうものだと私は思ってました。
==========================================
投稿処理前プレビュー確認後書込処理検証処理前反映可否確認処理後……
Re: (スコア:0)
プリペアードステートメント
- mysqlだと準備済みステートメントと訳されてますね。PREPARE構文で事前に準備されたステートメント(SQL文)を表すと思います。プレースホルダを含まなくてもPREPARE構文使えばプリペアードステートメントでしょう。
プレースホルダ
- 場所といえば場所だけど、転じて「?」を表す語となってることも多いと思う。マニュアル的にはパラメータマーカという方が多いみたい。パラメータマーカ→DBで使ってる、プレースホルダー→より一般的な言い方、といったところ?
パラメタライズドクエリ
- パラメータマーカを含むプリペアードステートメントを実際に用いて行うクエリ。具体的にはパラメータ付きのEXECUTE構文、またはその準備を含む一連の行為を意味する、ってところ?