アカウント名:
パスワード:
うーん、わたしゃ、10年以上OCI/ODBC/Postgres(はここ最近)のプログラム書いてるけど、Prepare->Bind->Executeでしか書かないのが普通だと思うんだが。てか、sampleにそれしか載ってない。
何をどうして、SQL Injectionされるようなコードがかけるのか?謎だ。
つーかね。Webアプリ程度なら、よっぽど厄介なトランザクション管理でもない限り、データベースごと自分で書いた方が早い事も少なくないんだけど。
これ [srad.jp]か。prepareでエスケープしてるとか何勘違いしてるのかと思ったら実はそういう実装だったという…('A`)
# 自分が使ってるのはOracleなので当然そんなクソはない
まてまて、Oracle だって大昔は結構穴だらけだったんだ。
でだな。他の国なら「それは昔の話」で安心していられるのだが。日本だけは、『何故そんな遺跡のようなものが現役で』とか『あれ?! これつい最近サービスインですよね??! 最新が 6.0 なのに 7.3 って何事ですか?!(一周する前の代物でした)』とかがゴロゴロしているので、Oracleだから大丈夫って言うセリフは絶対信頼できないんだな。
SQL Injectionなんて高尚な言葉使わなくともさ、そもそもシングルクォート入力したら落ちるシステムってことじゃない。俺もこの言葉が出てきた時は不思議だった。
で、今は解るだけど、自称プログラマは知らないんですよ、バインドなんて。
パラメタだけが異なるクエリを毎回アドホックに実行するんです、奴らは。つか、そもそもRDBが何か解ってない、単なるストアと認識してる。だからNoSQLなんて言われて喜んで踊りだすと思うんだ・・・
ちなみにOracleでもJDBCやADO/ADO.NET(ODBCやOO4Oでもだったか?)なんかだと、言語設定によるけどVARCHAR(2000)で定義した列に日本語文字列をフルでバインドできなかったりする。# 内部でutf8化された際にバッファを超えてしまうらしい・・・# 確かOCI由来だった気もするけど・・・CLOB使えと言われそうだけど、そういうのもあるのでバインドすりゃ問題なしともいえません。
VB6出身のWEBアプリプログラマーに多い、インジェクション向けの典型的なコード。
sql = "select * from hogehoge where COLUMN1 like '" + args(0) + "%'"
バインド式では完全SQL文を確認しにくいってのが原因なんでしょう。PHPやASP(JScript,VBScript)等々のデータ型宣言が出来ない言語はバインド式だとよりSQL文の検証が面倒なんでしょう。
そういう時(バインド時)にはDMLのトレースするのが正道だとおもうんですがねぇ。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
UNIXはただ死んだだけでなく、本当にひどい臭いを放ち始めている -- あるソフトウェアエンジニア
未だにSQL Injection (スコア:3, すばらしい洞察)
うーん、わたしゃ、10年以上OCI/ODBC/Postgres(はここ最近)のプログラム書いてるけど、Prepare->Bind->Executeでしか書かないのが普通だと思うんだが。
てか、sampleにそれしか載ってない。
何をどうして、SQL Injectionされるようなコードがかけるのか?謎だ。
Re:未だにSQL Injection (スコア:2)
つーかね。Webアプリ程度なら、よっぽど厄介なトランザクション管理でもない限り、データベースごと自分で書いた方が早い事も少なくないんだけど。
Re:未だにSQL Injection (スコア:1)
Re: (スコア:0)
Re: (スコア:0)
これ [srad.jp]か。
prepareでエスケープしてるとか何勘違いしてるのかと思ったら
実はそういう実装だったという…('A`)
# 自分が使ってるのはOracleなので当然そんなクソはない
Re:未だにSQL Injection (スコア:1)
まてまて、Oracle だって大昔は結構穴だらけだったんだ。
でだな。他の国なら「それは昔の話」で安心していられるのだが。
日本だけは、『何故そんな遺跡のようなものが現役で』とか『あれ?! これつい最近サービスインですよね??! 最新が 6.0 なのに 7.3 って何事ですか?!(一周する前の代物でした)』とかがゴロゴロしているので、Oracleだから大丈夫って言うセリフは絶対信頼できないんだな。
fjの教祖様
Re: (スコア:0)
SQL Injectionなんて高尚な言葉使わなくともさ、そもそもシングルクォート入力したら落ちるシステムってことじゃない。
俺もこの言葉が出てきた時は不思議だった。
で、今は解るだけど、自称プログラマは知らないんですよ、バインドなんて。
パラメタだけが異なるクエリを毎回アドホックに実行するんです、奴らは。
つか、そもそもRDBが何か解ってない、単なるストアと認識してる。
だからNoSQLなんて言われて喜んで踊りだすと思うんだ・・・
ちなみにOracleでもJDBCやADO/ADO.NET(ODBCやOO4Oでもだったか?)なんかだと、言語設定によるけどVARCHAR(2000)で定義した列に日本語文字列をフルでバインドできなかったりする。
# 内部でutf8化された際にバッファを超えてしまうらしい・・・
# 確かOCI由来だった気もするけど・・・
CLOB使えと言われそうだけど、そういうのもあるのでバインドすりゃ問題なしともいえません。
Re: (スコア:0)
VB6出身のWEBアプリプログラマーに多い、インジェクション向けの典型的なコード。
バインド式では完全SQL文を確認しにくいってのが原因なんでしょう。
PHPやASP(JScript,VBScript)等々のデータ型宣言が出来ない言語はバインド式だとよりSQL文の検証が面倒なんでしょう。
そういう時(バインド時)にはDMLのトレースするのが正道だとおもうんですがねぇ。