addslashesは使っていい?使っちゃダメ? - PHPプロ!Q&A掲示板

68

  • 100P

addslashesは使っていい?使っちゃダメ?

質問日時 / 2006年7月6日 22:09    回答数 / 4件

Questioner:  yoshiko  このエントリーをはてなブックマークに追加 

キーワード / addslashes    SQLインジェクション   

はじめまして。yoshikoと申します。
自分はSQLに入れる文字列をエスケープする際はaddslashes関数を使用し
ています。しかし、addslashes関数はSQLインジェクション対策には万全
ではないので使ってはいけないという話を聞いたことがあります。
ネット上で調べてみたのですが、使ってもいいと言っている所と使っては
いけないといっている所があり混乱しています。

そこで、みなさんにお聞きしたいのですが、結局addslashesは使っても
いいのでしょうか?よくないのでしょうか?
使用するデータベースによっても違ってくるのかもしれませんが、mysql、
postgres,oracleあたりではどうなのでしょうか?
理由も一緒に教えていただければと思います。宜しくお願いします。

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┣A01turifromvip>はじめまして。yoshikoと申します。 >自分はS
┃┗A01-1yoshikoご返答ありがとうございます。 上記のURLを読むと独
┗A02ito_yu初めまして。ito_yuと申します。 http://blog.ohga
 ┗A02-1yoshikoご返答ありがとうございます。 どうやらaddslahesは

回答一覧

並び替え:

A01 満足
answererturifromvip [7月6日 23:54]

>はじめまして。yoshikoと申します。
>自分はSQLに入れる文字列をエスケープする際はaddslashes関数を使用し
>ています。しかし、addslashes関数はSQLインジェクション対策には万全
>ではないので使ってはいけないという話を聞いたことがあります。
>ネット上で調べてみたのですが、使ってもいいと言っている所と使っては
>いけないといっている所があり混乱しています。
>
>そこで、みなさんにお聞きしたいのですが、結局addslashesは使っても
>いいのでしょうか?よくないのでしょうか?
確かにその通りだと思います。
http://ns1.php.gr.jp/pipermail/php-users/2001-August/001641.html
の話だとおもいますが。
間違っていたらすみません。

>使用するデータベースによっても違ってくるのかもしれませんが、mysql、
>postgres,oracleあたりではどうなのでしょうか?
>理由も一緒に教えていただければと思います。宜しくお願いします。
自分はプリペアードステートメントを使ったりして、できるだけ自前で処理する
事は避けています。
mysql_real_escape_stringとかpg_escape_stringとかそんな関数もあるので
そちらも検討してみてはいかがでしょうか。

この意見に回答する

ツリーへ TOPへ

A01-1
replyeryoshiko [7月8日 19:26]

ご返答ありがとうございます。
上記のURLを読むと独自関数を作成してまでaddslashesを使い続ける意味はないかな、
という気がしてきました。特にaddslashesに思い入れがあるわけでもないのですが、
理由がわからないまま別のやり方に変えるのはいやだったので質問してみました。
今後はプリペアドステートメントを使用したコーディングに切り替えてみようかと思います。
ありがとうございました。

この意見に回答する

ツリーへ TOPへ

A02 満足
answererito_yu [7月7日 17:03]

初めまして。ito_yuと申します。

http://blog.ohgaki.net/index.php/yohgaki/2006/02/13/addslashesa_la_a_a_ua_sa_pa_fa_a_bc_a_ma

結論は「使ってはいけない」だと思います

たとえばPEAR::DBであればDB::quote()という関数があり、内部では各DBMSに合わせたエスケープ処理をしています。

この意見に回答する

ツリーへ TOPへ

A02-1
replyeryoshiko [7月8日 19:32]

ご返答ありがとうございます。
どうやらaddslahesは使ってはいけないもののようですね。
文字コードが絡む話になると複雑でついていけなくなってしまいがちですがもう少し
勉強してみようとおもいます。
>たとえばPEAR::DBであればDB::quote()という関数があり、内部では各DBMSに合わせた
>エスケープ処理をしています。
ありがとうございます。こちらも検討してみます。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
array_mergeの再帰処理の動作について
 このエントリーをはてなブックマークに追加 
A
>1個になったとき$leftを返しますが、 >このとき、最終的な$leftはnullになるかと思います。 いいえ、最後は「渡された配列をそのまま」返します。要素が2以上あるときとの違いは(並べ替えずに戻るので...

>>続きを読む

再帰関数は最初の内は混乱しますが、非常に上手く使える場面もいずれ出てきます。これを機会に学んでいけるといいですね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)