PHP(ピー・エイチ・ピー)

【PHP】extract()関数は使うな危険!?

配列を勝手に変数に変換してくれるextract()という便利な関数があります。

 

例えば、

$array_data = array("test01" => "テスト01", "test02" => "テスト02", "test03" => "テスト03");

という配列が存在する場合、

extract($array_data);

を実行するだけで、

================================
$test01 = "テスト01";
$test02 = "テスト02";
$test03 = "テスト03";
================================
という変数を作ってくれます。

 

これをフォームで使用してやれば、

extract($_GET);

または、

extract($_POST);

とするだけで、

フォームに入力された値を勝手に変数に入れてくれますね!!

 

ただ、

なぜか個人的にあまり好きになれなかった関数なので、

基本的に私は使いません!!

 

で、

たまたまPHP関連で調べ事をしている時に、

extract()関数についての危険性を指摘したサイトを見掛けたので、

それについて少し触れてみたいと思います。

 

何が危険かというと、

既に存在する変数があると、

その値を上書いてしまうことが問題のようです。

 

例えば、

$sql = "select * from sample_db";
extract($_GET);
mysql_query($sql);

という順番にコードを書いていた場合、

悪意のあるユーザーが「http://ドメイン/?sql=~」というようにパラメータを渡してしまうと、

任意のSQL文を実行させてしまえるわけです。

 

だったら、

extract($_GET);

をスクリプトの頭の方に記述してやればいいだけなんですが、

何か恐いですね。

 

あと、

extract($_GET, EXTR_SKIP);

というようにEXTR_SKIPを使ってやれば、

既に定義されている変数を上書きすることはないようです。

 

なので、

適切に使用してやれば大丈夫だと思いますが、

セキュリティ的に問題があると言われている関数はなるべく避けたいですね!!

 

セキュリティーに厳しい不動産業者さんだと、

ツッコミが入る可能性性もあると思いますし。

0
この記事を書いている人
株式会社ディープ

名前ダッチ

メールアドレスadachi@deep-deep.jp

Twitterはこちら >>

  • コメント: 0

関連記事

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

最近の記事

  1. WP:WordPress(ワードプレス)
  2. WP:WordPress(ワードプレス)
  3. WP:WordPress(ワードプレス)
  4. 文系と理系のメリットとデメリット
  5. 東京駅
  6. 残業
  7. プログラマーになるのに年齢は関係ある?
  8. 年収(収入)
  9. income(収入)
  10. プログラマーになろう

Twitter

ダッチ@職業ブロガー兼プログラマー
@gatsu0000

アーカイブ

PAGE TOP