現在PHP(ファイル/var/www/website.com/public_html/functions.php
内)にあります。次のようにデータベースに接続しています:
function connect(){
$config = parse_ini_file('/var/www/website.com/db.ini');
$con = mysqli_connect("localhost",$config['username'],$config['password'],$config['db']);
if(!$con){
die("Failed to connect to Database");
}
return $con;
}
/var/www/website.com/db.ini
の場所
username=user123
password=pass123
db=mydb
権限あり:
-rw-r--r-- 1 root root 84 /var/www/website.com/db.ini
PHPはwww-data
またはroot
によって実行されます。
website.com
のルートは/var/www/website.com/public_html/
です。
これは、セキュリティの観点からPHPを使用してデータベースに接続する最良の方法ですか?このコードをオープンソースにしています。
あなたのアプローチはよさそうだ。
資格情報をソースコードにインラインで書き込むのではなく、別の構成ファイルに保存します。これにより、他の人とコードを共有するときに安全になり、設定ミスにより単純なPHPコードが出力されることがよくあります)場合に資格情報を保護します(これは非常に頻繁に発生します)。
構成ファイルはパブリックドキュメントルートの外部にあるため、別の脆弱性(ディレクトリトラバーサルの欠陥など)がない限り、Webアプリケーションのユーザーは直接アクセスできません。
いずれの場合も、サーバーをroot
として実行することは避けてください。それ以外の場合、root
は任意のファイルの読み取りおよび書き込みを行うことができるため、権限モデルは無意味です。
コードで認証情報を解析する必要がないことに注意してください。代わりに、サーバー構成で PHPランタイム設定 と指定できます ここ 。
こちらもご覧ください:
私はこの_-rw-r--r-- 1 root root
_アプローチに懐疑的です。それを行う安全な方法は
-r-------- 1 root root
_、つまりユーザーのみが読み取り可能にするroot
root
として起動し、認証情報を読み取り、すぐにsetuid()
を_www-data
_に接続します。したがって、アプリを危険にさらす人はだれでもcannotディレクトリトラバーサル攻撃を介してでもファイルを読み取ります。もちろん、root
を取得する別の方法が見つからない場合は、とにかくゲームオーバーです。これは PHPで可能なはずです です。これは、特権ポートであるポート80にバインドするためにWebサーバーが使用するメカニズムと同じです。