• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:このextractの使い方は危険ですか?)

extractの使い方の危険性とは?

このQ&Aのポイント
  • mysqlデータベースに登録されているdataテーブルの中身をすべて表示するためには、extractを使用することができます。
  • ただし、extractはセキュリティ上の問題があるため、注意が必要です。
  • 入力値が信頼できない場合、extractを使用することは危険です。適切なバリデーションとエスケープ処理を行うことが重要です。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>extractはセキュリティ的に問題はあるでしょうか? 外部からのデータを処理するわけではないので SQL側に完璧な形でデータを載せているならセキュリティ的には ほぼ問題はありません。 ただし、実際問題extractを使うメリットよりデメリットの方が大きく、 想定しない変数の上書で想像以上のリスクを負うことになります。 かなり厳密なルールを設定しての運用でなければ高い確率で 破綻するでしょう

infinity38
質問者

お礼

ご回答ありがとうございます。 万が一のことも考慮にいれて、extractはなるべく使わないようにしていこうと思います。。 アドバイスいただきありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

dataテーブルの列名は「既知」ですから、セキュリティ的な問題はないです(予想していない変数が生成される怖れはない)。 ただextractする意味があるのかどうかと言えば、まずないです。素直に$line['title']などと書いた方がデータベースから取得して使っていることがわかりやすいです。

infinity38
質問者

お礼

ご回答ありがとうございます。 そのまま$line["title"]のような形で書いていくことにしました。 アドバイスいただきありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • PHPで空の値を表示させたくない場合

    PHPでデータベースから値を取り出し 出力させるというスプリクトを作成してるのですが どうしても、入力フォームに空を値を 入れても空の値まで出力されてしまいます こういう場合はどうやって空の値を 弾くコードを書けばいいのか教えて もらえないでしょうか? ちなみに自分が書いたコードはこれです <?php $conn=mysql_connect("localhost", "username", "pass"); if (!$conn) { die('接続失敗です。'.mysql_error()); } mysql_select_db("database", $conn); mysql_query("SET NAMES 'ja-utf8'", $conn); mysql_query("INSERT INTO tablename (caram) VALUES ('$title_a')", $conn); $sql='SELECT title FROM tablename'; $rs=mysql_query($sql, $conn); $res=mysql_fetch_assoc($rs); if (isset($res)) { while ($res=mysql_fetch_assoc($rs)) { echo "<br>"; echo htmlspecialchars($res["caram"], ENT_QUOTES); } } else { echo ""; } mysql_close($conn); ?> どなたかよろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPでデータベース(mySQL)から値を取りだすには

    PHPで値をmySQLに保存するコードを作成するのに 成功したのはいいのですが、値を取り出して 出力するコードがうまく書けません ネットで調べてみたり、参考書を読んで やっているのですがうまくいきません こういうコードを書いたのですが <?php $conn=mysql_connect("localhost", "user", "pass"); if (!$conn) { die('接続失敗です。'.mysql_error()); } mysql_select_db("database", $conn); mysql_query("SET NAMES 'ja-utf8'", $conn); $sql='SELECT caram, FROM table'; $row=mysql_query($sql, $conn); $res=mysql_fetch_assoc($row); echo htmlspecialchars($res, ENT_QUOTES); mysql_close(); ?> どこが間違っているかご指摘いただけると ありがたいです。

    • 締切済み
    • PHP
  • PHP,MYSQLで特定例を表示する場合、

    PHP、MYSQLで特定例を表示する場合のsql文が分かりません。 データーベースmeibo no | name | sex | age | 1 | 一郎 | 男 | 20 | 2 | 一子 | 女 | 22 | 3 | 二郎 | 男 | 25 | 4 | 二子 | 女 | 27 | 女のみを表示したい場合を考え以下のようなコードを作りましたが上手くいきません。 <?php //データーベース接続 require_once('../require/dbcon.php'); //件数の表示 $recordSet = mysql_query('SELECT COUNT(sex) AS record_count FROM meibo WHERE sex(女)'); $data = mysql_fetch_assoc($recordSet); echo '<b>','※ 女性メンバー','</b> ('.$data['record_count'].' 人のデーターがあります。)<br /><br />'; //テーブルセット $recordSet = mysql_query('SELECT sex FROM meibo WHERE sex(女)'); while ($table = mysql_fetch_assoc($recordSet)) { echo $table['no']; echo $table['name']; echo $table['age']; } エラーでは $data = mysql_fetch_assoc($recordSet); と、 while ($table = mysql_fetch_assoc($recordSet)) のラインが出るのですが 何が悪いのか良く分かりません。 私の考えではsql文が悪いのではないかと思うのですが、どなたかお教えくださいませ。

    • ベストアンサー
    • PHP
  • SQL文の実行結果を変数で受けて、それを連想配列に格納したいです。

    SQL文の実行結果を変数で受けて、それを連想配列に格納したいです。 (カラム名を連想配列のキーにします。) また、値をHTMLエスケープ処理したいと考えています。 下記のソースを書いてみましたが、配列$all[]にうまく入りません。 $qresult = mysql_query($qstring); $all = array(); while (list ($key, $val) = mysql_fetch_assoc($qresult)){  $all[$key] = htmlentities($val, ENT_QUOTES,EUCJP); } また、3行目をeach(mysql_fetch_assoc($qresult))に変更してもみましたが、 「Variable passed to each() is not an array or object」エラーが出ます。 mysql_fetch_assocの戻り値は連想配列では無いのでしょうか。 $qresult = mysql_query($qstring); $all = array(); while ($rec = mysql_fetch_assoc($result)){  $all[] = $rec; } 上記だと問題なく取得出来るのですが。。。 何が悪いのでしょうか。

    • ベストアンサー
    • PHP
  • PHPでMySQLデータを更新するとエラー

    PHPで作成したプログラムでMySQLにデータを登録しています。 新規にデータの追加はできるのですが、更新するとエラーになります。 スクリプトは if (isset($_POST["submit_upd"])){ $no = key($_POST[submit_upd]); $name = htmlspecialchars($_POST["name"][$no], ENT_QUOTES); $division = htmlspecialchars($_POST["division"][$no], ENT_QUOTES); $email = htmlspecialchars($_POST["email"][$no], ENT_QUOTES); $tel = htmlspecialchars($_POST["tel"][$no], ENT_QUOTES); $group = htmlspecialchars($_POST["group"][$no], ENT_QUOTES); $sql = "UPDATE user SET name='$name',division='$division',email='$email',tel='$tel',group='$group' WHERE no=$no"; $mysql->query($sql); $error = "{$no}番のデータを変更しました"; エラーは(例:4番のデータのグループを3番に変更) 1064:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'group='3' WHERE no=4' at line 1 となっています。 以前同じプログラムで下記の質問をして、こちらは解決したのですが 結合していたり、whileループの設定などのせいでgroupの値を上手く得られないのか?と悩んでいます。 http://okwave.jp/qa3972723.html クラスも上記に記載してあります。 まわりに聞ける人が全くおらず困っています。 どうかお力を貸していただければと思いますので よろしくお願いします。

    • ベストアンサー
    • MySQL
  • PHPからMySQLにデータを渡すと文字化け

    PHPからフォームにデータを入れてMySQLに渡すとどうしても文字化けをしてしまいます。 MySQLはEUCらしいのです。 コレが解決すればほぼ完成するのに、最後の最後につまずいてます。 <?php require_once("../mydb_ini.php"); $con_mydb = mysql_connect($MYDBSERVER, $MYDBUSER, $MYDBPASSWARD); $selectmydb = mysql_select_db($MYDBNAME, $con_mydb) or die("失敗です");; $num=0; $mydbsql = "select * from newsline"; $rst = mysql_query($mydbsql, $con_mydb); $num = mysql_affected_rows(); $error = ""; $new_no = ""; $new_category = ""; $new_date = ""; $new_content = ""; $new_url_db = ""; $new_target = ""; $new_disabled = ""; if($_SERVER['REQUEST_METHOD']=="POST"){ if(isset($_POST["submit_add"])){ $new_no = htmlspecialchars($_POST["new_no"], ENT_QUOTES); $new_category = htmlspecialchars($_POST["new_category"], ENT_QUOTES); $new_date = htmlspecialchars($_POST["new_date"], ENT_QUOTES); $new_content = htmlspecialchars($_POST["new_content"], ENT_QUOTES); $new_url_db = htmlspecialchars($_POST["new_url_db"], ENT_QUOTES); $new_target = htmlspecialchars($_POST["new_target"], ENT_QUOTES); $new_disabled = htmlspecialchars($_POST["new_disabled"], ENT_QUOTES); if($error==""){ mb_convert_encoding($content, "EUC-JP"); $mydbsql = "INSERT INTO newsline VALUES('" . $new_no . "','" . $new_category . "', '" . $new_date . "', '" . $new_content . "', '" . $new_url_db . "', '" . $new_target . "', '" . $new_disabled . "')"; $rst = mysql_query($mydbsql, $con_mydb); } } if(isset($_POST["submit_upd"])){ $no = key($_POST[submit_upd]); $category = htmlspecialchars($_POST["category"][$no], ENT_QUOTES); $date = htmlspecialchars($_POST["date"][$no], ENT_QUOTES); $content = htmlspecialchars($_POST["content"][$no], ENT_QUOTES); $url_db = htmlspecialchars($_POST["url_db"][$no], ENT_QUOTES); $target = htmlspecialchars($_POST["target"][$no], ENT_QUOTES); $disabled = htmlspecialchars($_POST["disabled"][$no], ENT_QUOTES); if($error==""){ mb_convert_encoding($content, "EUC-JP"); $mydbsql = "UPDATE newsline SET category='$category', date='$date', content='$content', url_db='$url_db', target='$target', disabled='$disabled' WHERE no=". $no; $rst = mysql_query($mydbsql, $con_mydb); } } if(isset($_POST["submit_del"])){ $no = key($_POST[submit_del]); $mydbsql = "DELETE FROM newsline WHERE no=". $no; $rst = mysql_query($mydbsql, $con_mydb); } if($error==""){ $mydbsql; $new_no = ""; $new_category = ""; $new_date = ""; $new_content = ""; $new_url_db = ""; $new_target = ""; $new_disabled = ""; } } ?>

    • 締切済み
    • PHP
  • データベースのテキストデータの改行方法について

    別サイトで質問して nl2br関数を使えば改行が反映されるとわかったのですが、 <?php $str = nl2br(htmlspecialchars($str, ENT_QUOTES, 'UTF-8'), false); や <?php function h($str) { return htmlspecialchars($str, ENT_QUOTES, 'UTF-8'); } など、 上記のを試してみたのですが、データベース上のテキストデータの改行がサイトに反映されず困っております。 http://uploda.cc/img/img52b55ee23c01f.png このようにDBに記入したデータをどのようにすれば改行されますでしょうか? 初心者で非常に申し訳ございませんが宜しくお願いします。

    • 締切済み
    • PHP
  • HTML

    phpファイルからHTMLの書き出しについての質問です できるとこまでやってみたんですが途中にmysqlから取り出したデータを処理するためのwhileなどのphpがあるためうまくいきませんでした 途中にphpがある場合、どうすればうまくいきますか? PHP Version 5.2.5です ファイルロックはこんな感じでしょうか? よろしくお願いします $html = <<<END_OF_DATA <html> <head> <title>タイトル</title> </head> <body> <table> <?php while ($table = mysql_fetch_assoc($recordSet)) { ?> <tr> <td>{$table['id']}</td> <td><?php print(htmlspecialchars($table['name'], ENT_QUOTES)); ?></td> </tr> <?php } mysql_free_result($recordSet) or die("MySQL切断に失敗しました。"); mysql_close($link) or die("MySQL切断に失敗しました。"); ?> </table> </body> </html> END_OF_DATA; $filename = 'index.html'; $fp = fopen($filename,'w'); stream_set_write_buffer($fp,0); flock($fp, LOCK_EX); fwrite($fp, $html); flock($fp, LOCK_UN); fclose($fp);

    • ベストアンサー
    • PHP
  • 配列に配列を足すことはできるか?

    PHPを使ってMYSQLのデータを吐き出すプログラムを作っています。 $re=mysql_query(SQL命令1); でDBに命令し $kekka=mysql_fetch_array($re) で、配列に代入 $re=mysql_query(SQL命令2); でDBの別テーブル(データ型やカラム数は同じ)に命令し $kekkaに情報を足すということがしたいのですが、どのように書けば$kekkaにデータが蓄積されていくのでしょうか?

    • ベストアンサー
    • PHP
  • PHP に詳しい方教えてください

    以下のスクリプトを実行作成して実行するとエラーが出てしまいます。エラーを出さないようにする方法を教えていただけませんか。 ※ エラーがでるものの、正常に動作はしています。 ---エラーメッセージ--- Notice: Use of undefined constant id - assumed 'id' in C:\xampp\htdocs\shop\update.php on line 12 --スクリプト--- <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>商品管理</title> </head> <body> <?php require('dbconnect.php'); $id = $_REQUEST[id]; $sql = sprintf("SELECT * FROM my_items WHERE id=%d", ★12行目★ mysql_real_escape_string($id) ); $recordSet=mysql_query($sql); $data = mysql_fetch_assoc($recordSet); ?> <p>変更する内容を記入してください</p> <form id="frmUpdate" name="frmUpdate" method="post" action="update_do.php"> <dl> <dt> <label for="maker_id">メーカーID</label> </dt> <dd> <input name="maker_id" type="text" id="maker_id" size="10" maxlength="10" value="<?php print(htmlspecialchars($data['maker_id'], ENT_QUOTES)); ?>" /> </dd> <dt> <label for="item_name">商品名</label> </dt> <dd> <input name="item_name" type="text" id="item_name" size="35" maxlength="255" value="<?php print(htmlspecialchars($data['item_name'], ENT_QUOTES)); ?>" /> </dd> <dt> <label for="price">価格</label> </dt> <dd> <input name="price" type="text" id="price" size="10" maxlength="10" value="<?php print(htmlspecialchars($data['price'], ENT_QUOTES)); ?>" /> </dd> <dt> <label for="keyword">キーワード</label> </dt> <dd> <input name="keyword" type="text" id="keyword" size="50" maxlength="255" value="<?php print(htmlspecialchars($data['keyword'], ENT_QUOTES)); ?>" /> </dd> </dl> <input type="submit" value="変更する" /> <input type="hidden" name="id" value="<?php print(htmlspecialchars($data['id'], ENT_QUOTES)) ?>" /> <form > </body> </html>

    • ベストアンサー
    • PHP