PEAK XOOPS - Re: SQL用文字列エスケープにどの関数を使うべきか in englishin japanese

Re: SQL用文字列エスケープにどの関数を使うべきか

Target News
Subject SQL用文字列エスケープにどの関数を使うべきか
Summary 最近、ELFさんとSQLにおける文字列エスケープ方法について議論をかわしたのですが、それが面白かったのでここにメモしておきます。私自身はaddslashes()派です。その理由は以下のようなものです。(A) 速度(B) magic_quotes_gpc 環境との親和性(C) 逆変換関数が存在する(D)...

List posts in the topic

normal Re: SQL用文字列エスケープにどの関数を使うべきか

msg# 1.1
depth:
1
Previous post - Next post | Parent - No child | Posted on 2006/5/26 5:15 | Last modified
GIJOE  先任軍曹   Posts: 4110
Quote:
SQL文に対するリテラルのエスケープに関しては、セキュリティとかINJECTIONなんて概念が一般的になる前でも、プログラマに対して「正しくプログラムを動作させる為に必要」って教育がされますから。

それはおっしゃる通りで、SQLの基本中の基本ですよね。
SQL Injection対策の「サニタイズ」でないことは明らかです。

このあたり、ちゃんと書いたつもりだったのに、読み返した「サイバーテロ本」では、そういう記述がどこにもなかったのには自分でも愕然としました。
確かに高木浩光氏に突っ込まれても仕方ないでしょう。

ただ、SQL Injectionとなる理由って2つありますよね。

・リテラルのエスケープし忘れ
・リテラルではない要素をSQLへ導入する

この後者のミスの方がむしろ怖いんじゃないかと思うんです。
後者の手抜きパターンとして、ORDER BY のカラム名を直指定して、ホワイトリストチェックなんてのがありますが、それは「サニタイズ」と言えなくもないでしょう。

…って全然違う話題で恐縮ですが。


いずれにせよ、PHP史的に、addslashes()の元々の用途が違うのだから、SQL用エスケープに利用すべきではない、という意見は傾聴する価値がありますね。


Quote:
余談ですが、PHPに関しては、簡易WEB作成ツールって位置付けで発祥した為かmagic_quote_gpcなんてのが最初から用意されていたがために、余計に混乱をもたらしているような気がします。これがために、少し前にはmagic_quote_gpc環境で無い場合にすべてのGPCに addslashesなんて処理が行われていた物もあったりします。
なるほど〜。
PHPはスタート地点からまともなプログラミング言語とは違うんですね。
magic_quotes_gpcも regiter_globals と同じく、過去の遺物なんでしょうね。
Votes:15 Average:5.33

Posts tree

  Advanced search


Login
Username or e-mail:

Password:

Remember Me

Lost Password?

Register now!