アカウント名:
パスワード:
「ブラインド」SQLインジェクションって、区別するものなのかな?SQLインジェクションそのものだと思うんだけど。SQLインジェクションの種類わけならそれでもいいと思うんだが、何か別物のように聞こえてしまって/扱っているようで、違和感感じました。
PHPのソーシャルアプリを使っている人間に聞いたら、PDOでPlaceFolderを使ったクエリ作成(prepare使うやつ)は、使わないんだとか。PDOって処理速度が重いので、PV稼がなくてはいけないソーシャルアプリには不適切なんだとか。教科書どおりなら、SQLインジェクション防ぐのはprepare()が有効だと思うんだが・・・
さすがPHPer、期待に違わぬ残念さ。Javaで速度を稼ぐためにPreparedStatementをやめたなんて話は聞いたことがないなあ(検索条件が動的に変化するので使えなかったということはあるけど)。むしろかえってparseが必要な分遅くなるとしか思えないんだけど。実はDBMSがなんちゃってPreparedStatementしか用意されていないMySQLだったなんてオチはないよね。
PHPを下に見てる割にはJavaの事しか語れないんだね。そもそも言語も実装も異なるのに、PHPで使用していない機能をJavaで語っても仕方ないでしょうが。PHPもMySQLもよく分かりませんって素直に言えよ。
ソース見たけど、mysql_stmt_prepare()呼んでるよ。
php-5.3.6/ext/pdo_mysql/mysql_driver.c
#if HAVE_MYSQL_STMT_PREPARE || PDO_USE_MYSQLND...snip... if (!(S->stmt = mysql_stmt_init(H->server))) {...snip... if (mysql_stmt_prepare(S->stmt, sql, sql_len)) {
PHP+MySQLの組み合わせはほとんど使ったことないけど
要するに、PHP+PDO+MySQLの組み合わせでは、いくらprepareを使用しても、exeture時に?をPHP側で文字列置換したSQLをDBに投げるだけなので・SQLがキャッシュされないので遅い・SQLインジェクション脆弱性を防げない
これマジ?でも生SQLに展開されるのならMySQLのクエリキャッシュ(笑)は有効になるんじゃ?
MySQL関係なくね?それともOracle(wなら賢くキャッシュしてくれたりSQLインジェクションを防いでくれるのかよ。
昔DB2使ってたけど当然のようにキャッシュもインジェクション防ぐ機能もあるよ。むしろエスケープ(笑)とかしてるほうが珍しい。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
最初のバージョンは常に打ち捨てられる。
っていうか、これ (スコア:4, 興味深い)
「ブラインド」SQLインジェクションって、区別するものなのかな?SQLインジェクションそのものだと思うんだけど。SQLインジェクションの種類わけならそれでもいいと思うんだが、何か別物のように聞こえてしまって/扱っているようで、違和感感じました。
PHPのソーシャルアプリを使っている人間に聞いたら、PDOでPlaceFolderを使ったクエリ作成(prepare使うやつ)は、使わないんだとか。PDOって処理速度が重いので、PV稼がなくてはいけないソーシャルアプリには不適切なんだとか。教科書どおりなら、SQLインジェクション防ぐのはprepare()が有効だと思うんだが・・・
-- gonta --
"May Macintosh be with you"
Re: (スコア:0)
さすがPHPer、期待に違わぬ残念さ。
Javaで速度を稼ぐためにPreparedStatementをやめたなんて話は聞いたことがないなあ(検索条件が動的に変化するので使えなかったということはあるけど)。むしろかえってparseが必要な分遅くなるとしか思えないんだけど。
実はDBMSがなんちゃってPreparedStatementしか用意されていないMySQLだったなんてオチはないよね。
Re:っていうか、これ (スコア:0)
PHPを下に見てる割にはJavaの事しか語れないんだね。
そもそも言語も実装も異なるのに、PHPで使用していない機能をJavaで語っても仕方ないでしょうが。
PHPもMySQLもよく分かりませんって素直に言えよ。
Re: (スコア:0)
Re: (スコア:0)
・SQLがキャッシュされないので遅い
・SQLインジェクション脆弱性を防げない
つこと。
ootoriはたしかにバカだが、本当にバカなのはPDOとMySQLの実装者で、全世界のPHPユーザが迷惑してる。
FUD? (スコア:1)
ソース見たけど、mysql_stmt_prepare()呼んでるよ。
php-5.3.6/ext/pdo_mysql/mysql_driver.c
Re: (スコア:0)
PHP+MySQLの組み合わせはほとんど使ったことないけど
要するに、PHP+PDO+MySQLの組み合わせでは、いくらprepareを使用しても、exeture時に?をPHP側で文字列置換したSQLをDBに投げるだけなので
・SQLがキャッシュされないので遅い
・SQLインジェクション脆弱性を防げない
これマジ?
でも生SQLに展開されるのならMySQLのクエリキャッシュ(笑)は有効になるんじゃ?
Re: (スコア:0)
MySQL関係なくね?
それともOracle(wなら賢くキャッシュしてくれたりSQLインジェクションを防いでくれるのかよ。
Re: (スコア:0)
簡単に言うと直書きされたSQLを勝手にバインド変数に置き換えてからキャッシュ探してくれる。
逆にバイント変数使っても変数の中身見て実行計画変更する機能まである。
Re: (スコア:0)
昔DB2使ってたけど当然のようにキャッシュもインジェクション防ぐ機能もあるよ。
むしろエスケープ(笑)とかしてるほうが珍しい。