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を使ってやれば、

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

 

なので、

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

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

 

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

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

この記事を書いている人
株式会社ディープ
名前足立拓也

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

関連記事

最近の記事

  1. PHP(ピー・エイチ・ピー)
  2. レンタルサーバ:おすすめの共用サーバ
  3. ホームページ(homepage)
  4. システムアップデート
  5. エックスサーバー(XSERVER)
  6. エックスサーバー(XSERVER)
  7. エックスサーバー(XSERVER)
  8. WEBサイト構築
  9. スパム(SPAM)対策
  10. サイト公開

Twitter

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

  • うちの会社も時々ランサーズ使ってるけど、めっちゃ助かってます! 中小は、人件費のような固定費がかさむのは痛くてなかなか新しい人を採用できんから、 必要な時にお互いマッチングして仕事を依頼できるのはありがたいです。 創業者からのメ… twitter.com/i/web/status/1…
    about 6時間 ago via Twitter Web Client

アーカイブ

PAGE TOP