• ベストアンサー

セキュリティについて

まだ初めて2日目ですが少し不安な事がありまして、質問させていただきます。 データベースに接続する時はHTMLに <?php //MySQLに接続・ユーザー名・パスワードを入れる if( ! $conn = mysql_connect( \'localhost\', \'DBID\', \'DB_Password\') ){ die( \'MySQL接続失敗\' ); } //データベースの選択・データベース名を入れる mysql_select_db( \'web_db\', $conn ); //ヘッダ出力をします echo \"データベース接続OK\"; ?> って記述しますよね? 相手には記述してるソースは見られませんが、なんかセキュリティが不安です。 これが普通なんでしょうか?深く考えすぎですか? よろしくお願いします

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

  • ベストアンサー
  • Bruckner
  • ベストアンサー率25% (1/4)
回答No.2

確かに会員用のシステム等をPHP/MYSQLで組むとなると、セキュリティの都合上、実行ファイルやソースは隠した方がいいかもしれません。(レンタルサーバならあまり気にする人もいないかもしれませんが) ココに詳しい作り方がのったページを挙げておきました。 ちなみにNo.1さんの仰るとおり、「\"」や「\'」はエラーになると思います。 すべて「”」でよいと思います。 参考になれば。

参考URL:
http://php.sound-uz.jp/bbs/res/2761
全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

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

別に気にはしていませんが、DB接続情報は他のスクリプトでも使いまわすことが多いので別ファイルにしますね。 で、HTTPでアクセス出来ない位置に置いたりとか拡張子は.cgiにしたりとか・・。 ちなみに、二重引用符の中の二重引用符は「\」でエスケープしますが、それ以外(本来の二重引用符)はエスケープしませんよ。例示されたスクリプトはエラーになりませんか?

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

関連するQ&A

  • PDOでのデータベース接続について質問です

    現在、PDOでのmysqlデータベースの操作を学習しています。 以前、mysql_connectでのデータベース接続を学習していた際に、 使用したいデータベースの名前を変数名$dbnameに格納し、 $connect = mysql_connect($server, $user, $password); mysql_select_db($dbname); でデータベースに接続していました。 その要領をふまえて PDOでもデータベースの名前を変数名$dbnameに格納し、 $db = new PDO('mysql:host=localhost;dbname=$dbname',$user,$password); で接続しようと試みたところ、エラーになりました。 そこで、データベース名を変数に格納せず、 $db = new PDO('mysql:host=localhost;dbname=データベース名',$user,$password); で試してみたところ、接続が出来ました。 そこで質問なのですが、PDOでデータベースに接続する場合、 データベース名を変数に格納することは物理的に出来ないのでしょうか? それともうひとつ質問があります。 mysql_connectを使用したときはデータベース接続用のPHPファイルを作成し、 データベース接続が必要なPHPファイルの時にrequire_onceでデータベース接続用のPHPファイルを呼び出ししていましたが、PDOでもデータベース接続用のPHPファイルを呼び出して接続することは可能でしょうか? 絶対に変数に格納したいとか、絶対にデータベース接続を別ファイルにしたいというわけではありませんが、もともとmysql apiで学習していたためmysql apiとPDOの違いが少し気になってしまいました。 ご回答、よろしくお願いします。

    • ベストアンサー
    • PHP
  • phpとデータベース

    書籍のサンプルを実行しても表示されません pearのインストールが怪しいですが、どこを直せばいいかわかりません。 ご教授お願いいたします。 <HTML> <HEAD> <TITLE>PHPのテスト</TITLE> </HEAD> <BODY> <?php require_once("DB.php"); $dbUser = "sample"; // ユーザー名 $dbPass = "password"; // パスワード $dbHost = "localhost"; // ホスト名 $dbName = "sampledb"; // データベース名 $dbType = "mysql"; // データベースの種類 // MySQL="mysql", PostgreSQL="pgsql", MS SQL-Server="mssql", ODBC="odbc" などを設定 // 接続文字列の作成 $dsn = "$dbType://$dbUser:$dbPass@$dbHost/$dbName"; // データベースに接続 $conn = DB::connect($dsn); // 接続に失敗したらメッセージを表示して終了します。 if (DB::isError($conn)){ die($conn->getMessage()); } print('接続に成功しました。'); // データベースから切断します。 $conn->disconnect(); ?> </BODY> </HTML>

  • mySQLでINSERT Errorとなります。

    初心者です。よろしくお願いいたします。 データを入れたいのですが、エラーとなってしまいます。 以下でデータベースとテーブルを作成し、 <?php $db_name="tori"; $tbl_name = "hato"; $db = mysql_connect('localhost', 'root', ''); if (!$db) { die('接続できません: ' . mysql_error()); } $sql = 'CREATE DATABASE tori'; if (mysql_query($sql, $db)) { echo "データベースtori の作成に成功しました\n"; } else { echo 'データベースtoriの作成に失敗しました: ' . mysql_error() . "\n";} mysql_select_db($db_name,$db) or die("データベースへの接続エラー"); $query ="create table {$tbl_name} ( id char(8) primary key, date TEXT, sex TEXT, age TEXT )TYPE=MyISAM"; mysql_query($query); $query ="INSERT INTO `houzingpark`.`hatogaya` ( id , date , sex , iro ) VALUES ( '2', 'uu', 'ii', 'po' )"; mysql_close($db); ?> 以下で入れ込みたいのですが、出来ないのです。 <?php $db_name="tori"; $tbl_name = "hato"; $db = mysql_connect('localhost', 'root', ''); if (!$db) { die('接続できません: ' . mysql_error()); } mysql_select_db($db_name,$db) or die("データベースへの接続エラー"); $sql="INSERT INTO hatogaya ( id , date , sex , iro ) VALUES ( 3, 2005-12-3, mesu, cya )"; mysql_query($sql); if(!$result){print 'INSERT Error!';} echo $sql; mysql_close($db); ?> でINSERTしようとするのですが、INSERT Error!と表示されてしまいます。 Adminで見るとデータベースとテーブルは出来ているのですが、どうしてもINSERTできないのです。 もう何時間も悪戦苦闘しております。 どなたかご指導よろしくお願いいたします。

  • 異なるデータベース間のリレーション

    phpmyadmin上の異なるデータベース間のテーブルでリレーションをかけたいのですが、うまくいきません。 new_linkフラグをtrueにすることで異なるデータベースを開くところまではできました。 アドバイスいただけないでしょうか。 ※DB1の中にtable1が、DB2の中にtable2がある //失敗する $con1 = mysql_connect("localhost",username,pass); mysql_select_db('DB1',$con1); $con2 = mysql_connect("localhost",username,pass,true); mysql_select_db('DB2',$con2); $sql = "select * from table1,table2 where table1.id = table2.id"; $result = mysql_query($sql) or die(mysql_error()); メッセージ⇒Table 'DB2.table1' doesn't exist //これは成功する $con1 = mysql_connect("localhost",username,pass); mysql_select_db('DB1',$con1); $con2 = mysql_connect("localhost",username,pass,true); mysql_select_db('DB2',$con2); $sql1 = "select * from table1"; $result1 = mysql_query($sql,$con1) or die(mysql_error()); $sql2 = "select * from table2"; $result2 = mysql_query($sql2,$con2) or die(mysql_error());

    • ベストアンサー
    • MySQL
  • 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で空の値を表示させたくない場合

    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+phpMyAdmin パスワードとセキュリィティ

    例えば以下のようなプログラムがあったとして <html> <head><title>簡易接続</title></head> <body> <?php $conn = mysql_connect("localhost", "usr", "passwd"); mysql_select_db("kisop", $conn); $res = mysql_query("SHOW TABLES",$conn); if($res){ print ("データ獲得に成功しました。"); } mysql_free_result($res); ?> </body> </html> 以下の部分の $conn = mysql_connect("localhost", "usr", "passwd"); が見えてしまうとデータベースを 誰かが改変出来てしまうということでしょうか? アクセス制限された外部からPHPを読み込むとかの 対策等はありますか?

    • ベストアンサー
    • PHP
  • PHP+mySQL認証画面

    サーバーの引っ越しで新しいサーバーにてプログラムの動作確認を行っています。 管理者パネルに入るのに、PHPで作成した認証プログラムでログインしようとすると、入力しても何度も聞いてきて入れません。 旧 MySQL5.0.22   phpMyAdmin2.8.2.4 新 MySQL5.1.69 phpMyAdmin3.5.8.1  IDとパスワードはデータベースで設定。 管理者パネルで変更できるようになっている。 $sv = "**"; $dbname = "**"; $user = "**"; $pass = "**"; ログイン認証 //データベースに接続する $conn = mysql_connect($sv,$user,$pass) or die("接続エラー"); mysql_select_db($dbname) or die("データーベース接続エラー"); $sql = "SELECT id, pass FROM pass_t WHERE pno=1"; $res = mysql_query($sql, $conn) or die("データ抽出エラー"); while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) { $db_user_id=$row['id']; $db_password=$row['pass']; } if(!isset($_SERVER["PHP_AUTH_USER"]) || $_SERVER["PHP_AUTH_USER"] != "$db_user_id" || $_SERVER["PHP_AUTH_PW"] != "$db_password") { header("WWW-Authenticate: Basic realm=\"login\""); header('HTTP/1.0 401 Unauthorized'); echo "ユーザー名またはパスワードが間違っています。<br>"; echo "もう一度はじめからやり直してください。"; exit; } 細々変えて試してみましたが駄目でした。 まだまだわからないことだらけの初心者なので、どうにもならずで 解決策がありましたらぜひ教えて頂けますと幸いです。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • FC4でmysqlを使用して PEAR DB への接続ができない

    FC4に、yumでPHP5.0.4、php-pear-5.0.4、php-mysql-5.0.4、(mysql-4.1.20,mysql-server-4.1.20)をインストールしました。 <?php $con = mysql_connect("localhost","taro","password") or die("接続出来ません"); print "接続しました"; mysql_close($con); ?> を実行すると、「接続しました」と出ます。ところが、 <HTML> <HEAD><TITLE>PHP test</TITLE></HEAD> <BODY> <?php require_once("DB.php"); $dbUser="taro"; $dbPass="password"; $dbHost="localhost"; $dbName="testdb"; $dbType="mysql"; $dsn="$dbType://$dbUser:$dbPass:@$dbHost/$dbName"; $conn = DB::connect($dsn); if(DB::isError($conn)){ die($conn->getMessage()); } print ('DBに接続しました'); $conn->disconnect(); ?> </BODY></HTML> を実行すると、DB Error: connect failed と出て、接続できません。 php.iniは、 include_path = ".:/usr/share/pear:/php/includes" としてあり、 [root@FC4 ~]# ls -l /usr/share/pear/ で調べても drwxr-xr-x 2 root root 4096 5月 27 18:06 DB -rw-r--r-- 1 root root 38937 11月 8 2005 DB.php となっています。 パスの切り方が間違っているでしょうか? どのようにすれば接続できるでしょうか?よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • selectであるデータを検索した結果のリターンコードを取得するには?

    以下のようなコードをPHP内で実行しています。 以下の例は、MySQLテーブル'test_tbl'の'id'というフィールド内に'500'というデータが存在した場合、そのデータを取り出してecho文で表示させるようにしたものです。 検索した結果データが存在しなかった場合、データが存在していないということを、リターンコードで判断したいと思っています。 リターンコードはどうやって見ることができますか? '$rs'にリターンコードが入ってくるのでしょうか? ('Resource id #3'のような値が返ってくるようですが) リターンコードとその意味の一覧とかが、どこかのサイトにあればURLを教えていただければ助かります。 よろしくお願い致します。 ------------------------------------------------ <?php  if( ! $conn = mysql_connect( 'localhost', 'user_id', 'password') ){   die( 'MySQL接続失敗' );  }  mysql_select_db( 'test_db', $conn );  $rs = mysql_query("SELECT id FROM test_tbl WHERE id = 500", $conn);  $rec = mysql_fetch_array( $rs, MYSQL_ASSOC );  echo $rec['id'];  mysql_free_result( $rs );  mysql_close($conn); ?>