811215 ランダム
 HOME | DIARY | PROFILE 【フォローする】 【ログイン】

まんじうこわい@楽

まんじうこわい@楽

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

PR

Keyword Search

▼キーワード検索

Calendar

Profile

hknopage

hknopage

Free Space

Category

Freepage List

2007.03.22
XML
カテゴリ:PHP
 今日も引き続き開発を行なっていたのですが、データベース絡みの開発で気をつけないといけないのがSQLインジェクションです。

 簡単に説明すると、入力フォームにSQLを書かれて、データベースをいじられてしまう事。(だと思ってます

 POSTやGETの値を信じてはいけないというのは、そんな事が関係しているのです。
 
 で、SQLインジェクションを防ぐ為には特殊文字をエスケープしてあげる必要があるのです。PHPにはSQLのエスケープ関数があり、以前よく使われていたのが
「addslashes()」
 なのですが、何でも今では推奨されていないとか(不具合があるとかないとか

 PostgreSQLを使用している場合に推奨されているエスケープ関数は
「pg_escape_string()」
 だそうです。ちなみにMySQLは
「mysql_real_escape_string()」
 になるそうです。
 
 が、しかーし!私の開発環境ではpg_escape_string()が使えない!
 
 そこで、POSTで渡した値を自力でエスケープする事にしました。
 
 SQL文をPHPで実行する際には、値を必ずシングルコーテーションで囲みます。これだけで、かなりSQLインジェクションに対して有効になるはずです。しかし、値にシングルコーテーションが含まれている場合があるので、これをエスケープ処理しないといけません。ちなみにシングルコーテーションをエスケープするには、シングルコーテーションでエスケープしてあげます。
 (「'」->「''」こんな感じ)

 使用する関数は
「ereg_replace()」
 で、使い方としては
「ereg_replace("'","''",[string])」

 ただ、気をつけないといけないのが「文字コード」で、[string]とPHP文の文字コードが違うとうまくいかない場合があるかも?しれません。。。

 これだけでは不完全なので色々なチェックを織り交ぜながら、安全なものを作れるようがんばっちょります!

------オマケ------
 限界値チェックのために文字の長さを調べるのですが、マルチバイト文字が含まれるので「mb_strlen()」を使用します。しかし、どうしてもマルチバイト文字を2とカウントしてしまいます・・・
(=_=;)
 そんな時は文字コードを指定するとうまくいくかもしれません。というか、うまくいきました(^^)v
 こんな感じで指定してあげます。
「mb_strlen($str,"EUC-JP")」





お気に入りの記事を「いいね!」で応援しよう

Last updated  2011.04.21 16:25:36
コメント(0) | コメントを書く



© Rakuten Group, Inc.
X