2017-07-27 43 views
0

mysqlでクエリを実行してファイルをエクスポートするために使用するPHPスクリプトがあります。私は、PHPのファイル内にログインの資格情報を持っています。それはページにアクセスしたユーザーによって呼び出され、ファイルは自動的にダウンロードされます。私はあなたが別のファイルに資格情報を書いて、ファイルに含めるべきであることを読んだ。私はこのファイルをどこに安全に格納するか、そしてそれを適切に入れる方法を知るためにphpについて十分に知りません。私は友人にファイルの書き込みを手伝ってもらいました。
phpスクリプトは次のとおりです。あなたはそれがあなたのために動作しませんので、彼らはまだそれをエコーし​​てパスワードを取得することができますincludeに入れた場合でもPHPファイルのmysqlパスワードを隠す

<?php 
header("Access-Control-Allow-Origin: *"); 
$db_user = "user"; //replace with your mysql username 
$db_pass = "password"; //replace with your mysql password 
$db_source = "database"; //replace with your database name 
$mysqli = mysqli_connect("localhost", $db_user, $db_pass, $db_source); 

if (mysqli_connect_errno()) { 
    printf("Connect failed: %s\n", mysqli_connect_error()); 
    exit(); 
} else { 
// place sql query between quotes for $sql -- do not end with ; 
    $sql = " SQL Statement Here "; 
    $res = mysqli_query($mysqli, $sql); 
    $rows = array(); 
    if ($res) { 
     while ($r = mysqli_fetch_assoc($res)) { 
      $rows[] = $r; 
     } 
    } else { 
     printf("Could not retrieve records: %s\n", mysqli_error($mysqli)); 
    } 

    $return = array(
     $rows 
    ); 

    array_to_csv_download($rows); 

    mysqli_free_result($res); 
    mysqli_close($mysqli); 
    unset ($db_user, $db_pass, $db_source); 
} 


function array_to_csv_download($array, $filename = "export.csv", $delimiter=",") { 
    header('Content-Type: application/csv'); 
    header('Content-Disposition: attachment; filename="'.$filename.'";'); 

    $f = fopen('php://output', 'w'); 

    foreach ($array as $line) { 
     fputcsv($f, $line, $delimiter); 
    } 
} 

?> 

答えて

3

正しく設定されたサーバーにPHPファイルを置くと、ユーザーはPHPソースコードにアクセスできなくなります。したがって、サーバーを信頼する場合は、データベース資格情報を問題なくコードに入れることができます。あなたは、サーバー上のウェブサイトを置くとき、あなたは、このサーバーが安全であることを確認する必要があります

1.

しかし、あなたは関連するセキュリティが発生することがありますいくつかの他の問題があります。外部からの誰かが、PHPソースファイルをサーバーから読み取るべきではありません。あなたのホスティングプロバイダによっては、サーバーがすでにあなたのために保護されているかもしれないので、あまり心配する必要はありません(サーバーにアクセスできる人の数を最小限に抑えている限り)。

2.資格情報を外部ファイルに保存する必要があります。ただし、これはサーバーのセキュリティとは関係ありません。複数の他のプログラマーがいるプロジェクトで作業していて、データベースの資格情報を非公開にしたい場合に便利です。通常は、他の誰とも共有しないように、すべてのプライベートデータを1つのファイルに保存します。たとえば、gitなどのバージョン管理システムを使用している場合、このファイルを追跡する必要はなく、すべてのプログラマは自分のバージョンのファイルを持つ必要があります。これにより、機密情報が広範囲に広がるリスクが軽減されます。

+0

これは* sort of * trueです。バージョン管理の外にある別のファイルに保存する方がいいので、誤ってGithubを少しプライベートにするなどしても公開されません。たとえば、 '。env'ファイルを作成します。 – ceejayoz

+0

@ceejayoz true!私はそれを私の答えに加えます。ありがとう! – Maxime

1

信頼できないソースにデータベースのパスワードを送信している場合は、間違っています。おそらくあなたがしたいことは、そのスクリプトをREST APIに変えることです。その上に多くのチュートリアルがあります。その後、あなたのパスワードを見ることはありません。彼らがしなければならないのは、限られたコマンドセットを送るだけで、あなたのスクリプトは必要なデータを返すでしょう。 REST APIは一種のブラックボックスのように機能し、エンドユーザーは限られた機能のセットにしかアクセスできません。

+0

誰かがPHPファイルからパスワードを "エコーアウト"して、ソースを見ることができないようにする方法を教えてください。 – cars10m

+0

例えば 'connect.php'という名前のファイルがデータベース接続情報である場合、' include 'connect.php'を実行すると、 '$ $ password;'と書いて '$ password'は 'connect.php'内の変数です – Difster

+0

はい、この"誰か "はPHPソースファイルが保存されているディレクトリへの読み書きアクセス権が必要です。私が知る限り、WebユーザーはPHP文をPHPファイルに挿入する方法がありません。 – cars10m

関連する問題