|
カテゴリ: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) | コメントを書く
[PHP] カテゴリの最新記事
|