2009-09-16 13 views
7

PHPコード内にパスワードを設定して、ブラウザのページを閲覧できないようにするにはどうすればよいですか?PHPコードの中にパスワードを安全に保存するには?

です。<?php $password = 'password' ?>は十分ですか?これを行うためのより良い、より安全な方法がありますか?

+0

あなたのパスワードをPHPファイルに保存したいのはなぜですか?これは、回答に多くの混乱を引き起こしている – knittl

+0

私はクライアントのためのスクリプトを開発しています。私はクライアントがパスワードを知ることを誰も望んでいないので、「テスト」アカウントを使用しています。私は彼が簡単にパスワードをテストアカウントから私に知らせずに変更できる方法を見つけなければならない。 Btw、これはデータベースとのやりとりがありません。 – nunos

+0

アカウント情報をPHPファイルに保存していますか?もしそうなら、受け入れられた答えははるかに良いものではない。このシナリオでは、ハッシュ+ソルトを使用します。あなたのクライアントはあなたに彼の塩漬けのハッシュを与えることができ、あなたは彼のパスワード(誰も知りません)を知る方法がありません – knittl

答えて

12

これは、保存するパスワードのタイプに依存します。

  • たとえば、パスワードを保存する場合は、 $users配列を持つと、ハッシュが行く方法です。sha1md5または他のフレーバーあなたが他に接続するためのパスワードを保存したい場合は、同じパスワードが同じハッシュ

  • にはなりませんので、追加のセキュリティのためのsaltアカウントの追加

    、(ここでは概要を説明します)データベースのようなリソース:パスワードをドキュメントルートの外に保存すると安全です。つまり、ブラウザがアクセスできない場合です。それが不可能な場合は、外部の

+1

私は、ドキュメントルートの外にパスワードを格納すると実際に何かが変更されることはありません。 '<?php'タグ内にある限り、クライアントには送られません。 – nickf

+8

ファイルがPHPによって処理される場合にのみ "012"が返されます。 PHPをインストールすると、クライアントにクリアテキストで送信される可能性があります。 –

+1

@nickf FacebookとTumblrの両方が誤ってウェブサーバーの設定ミスによってPHPコードを公開しました。あなたにも起こることがあります。 http://techcrunch.com/2007/08/11/facebook-source-code-leaked/ http://staff.tumblr.com/post/3959106211/update-regarding-security-issue – ceejayoz

1

パスワードを暗号化して保存します。たとえば、次の出力を取得します。

sha1("secretpassword"); 

...をコードに入れます。さらに、データベースやWebサーバーのディレクトリツリー外のファイルに配置することもできます。

+9

データベースにパスワードを入れて...興味深い問題があります:-) – Joey

+0

+1これは唯一の純粋な解決策です! (つまり、PHPは解析されるので、あなたのパスワードを見ることができます:-S) – knittl

+19

SHAは*暗号化ではありません*。これはハッシュアルゴリズムです。 – Gumbo

6

あなたのPHPコードはサーバー上で処理されます(バーリング設定エラー)。 <?php ?>;ブロック内の何もブラウザに表示されません。デプロイメントサーバーでクライアントに構文エラーが表示されないようにする必要があります。つまり、エラー報告がE_PARSEを含まないものに設定されているため、ライブコードを急いで編集しないようにしてください。

編集:PHPの設定が破損した場合に公開を避けるために、文書ルート以外のファイルにそれらを保存するという点は確かに有効です。私がPHPを使用したとき、実行時にrequire dだったhtdocsの外にconfig.incファイルを保存し、構成固有の変数(つまりパスワード)をエクスポートしました。一般的な目的のために、おそらく100%ではない水密性は十分

+0

それは良い解決策ではありません。誰もがソースコードにアクセスできるチームで働いている場合はどうでしょうか。ダメダメダメ!ハッシュは行く方法です – knittl

+5

ハッシュはどのように役立ちますか?ハッシュが "安全な"リソースに接続するのに十分であれば、パスワードを保存するよりも安全にハッシュを保存する方法はありますか? –

+0

通常、2つのシナリオがあります。 [私の答え](http://stackoverflow.com/questions/1432545/how-to-safely-store-a-password-inside-php-code/1432589#1432589)を参照してください、それは両方について語る – knittl

1

基本、:

ハッシュお気に入りのアルゴリズムを使用して、パスワード(セキュリティ強化のための塩を使用)、およびハッシュを保存(塩)。 &ハッシュされた入力と保存されたデータを比較して、パスワードを確認します。

2

これを行うには方法がありません。しかし、PHPはサーバー側の言語であるため、保存したパスワードはPHPファイルに保存されたテキストをプレーンテキストとして表示することはできません。つまり、ブラウザに出力しない限り、目に見えないままです。

だから安全です。

0

何かを出力しない限り、PHPコードブロックをクライアントが取り出すことはできません。観察:

<?php 
    if($password=="abcd") 
     echo "OK"; 
    else 
     echo "Wrong."; 
?> 

ユーザーは[OK]または[間違っていない]を取得できます。

+8

PHPを誤ってアンインストールして、Apacheがプレーンテキストとしてサービスを開始しない限り、それはです。それが数回起こるのを見ました! – ceejayoz

+0

また、URLのどこかに '../../../../../ etc/passwd'のようなものを入れてコンテンツをファイル化する方法もあります。しかし、あなたがユーザーが入力したものに注意を払わず、ファイルに敏感なものが格納されているときはいつでも動作します。 – Joey

-1

最善の方法は、ルートディレクトリの上にパスワードを保存することです。あなたがphpファイルにパスワードを設定すると、phpファイルがサーバで実行されているため、本体を見ることができません。しかし、サーバがphpをサポートしていない場合、それらのファイルはテキストファイルとして配信され、誰でもそのパスワードを見ることができます。

+0

データベースのパスワードはどこに保存しますか? – innaM

+0

フォルダ/ディレクトリをルートディレクトリの上に置きます。そのため、誰もブラウザで直接アクセスできなくなります。 – Mohamed

+0

あなたの答えは何ですか?パスワードをデータベースに保存するか、ドキュメントルートの上のファイルに保存しますか? – innaM

1

からのすべての要求を拒否するように.htaccessファイルを使用することができますが、PHP以内にパスワードを取得できた場合、それは検索可能です...

そのあなたができる唯一のことパスワードは「保護された」場所に移動することです。

ほとんどのホスティング会社は、DBファイルなどを置くことができる別の場所を提供します。この場所には、ブラウザからアクセスできません。パスワードはそこに保存する必要があります。

しかし、あなたのサーバーにはまだ残っています。誰かがあなたのボックスにアクセスすると、彼はあなたのパスワードを持っています。

だから「安全なパスワード」

ザ・ようなものはありません - (彼はそれをデコードする方法を持って、あなたのPHPに取得し、彼は保護されたファイルへのアクセス権を持っている>彼はそれを読むことができます)あなたが持っている唯一のオプションはあなたのユーザーのためのパスワードを保存しないなどです...私はサービスに加入すれば気が狂ってしまいます。彼らはそれを「回収可能な方法」で保存します。それはあなたがすべきことではありません。

これは、すべてのハッシュとソルトが入る場所です。誰かがリソースにアクセスできるようにしたいと思っています。したがって、パスワードをハッシュ+ソルトし、そのサービスにアクセスするユーザーのためにDBに格納します。また、ユーザーが認証する場合、同じアルゴリズムを適用してハッシュを作成し、比較します。

+0

まったく...だけどパスワードが盗まれた場合、無作為な保護手段を追加することで負債を減らすことができますか?私はデータベースのフィールド内のデータベースにパスワードをスクランブルした人と一緒に仕事をしました。私はまだ混乱している。アプリケーションが別のパスワードを使って別のデータベースを指し示すようにしたいときには、作業が難しくなりました。 – Kieveli

1

パスワードが「iamanuisance」であるとします。コードにパスワードを保存する方法は次のとおりです。あなたのヘッダーのどこかでこれを滑らせてください。

//calculate the answer to the universe 
${p()}=implode(null,array(chr(0150+floor(rand(define(chr(ord('i')+16),'m'), 
2*define(chr(0x58),1)-0.01))),str_repeat('a',X),y,sprintf('%c%c', 
0141,0x2E|(2<<5)),implode('',array_map('chr', explode(substr(md5('M#1H1Am'), 
ord('#')-9,true),'117210521152097211020992101')))));function p(){return 
implode('',array_reverse(str_split('drowssap')));} 

は、念のためにそれが完全に明白ではありません、あなたは、簡単に$passwordとして後でパスワードにアクセスすることができます。乾杯! :P

+1

yuck!あいまいさによるセキュリティは機能しません。期間。 – knittl

+2

笑、同上。それはちょうど冗談として意味された;) – brianreavis

0

私は、通常、サービスのパスワードとして生のPHPコードを信頼しません。シンプルなPHP拡張モジュールを作成してパスワードを解放してください。これにより、ワーキングセットにはパスワードがないことが保証され、侵害されたマシンがハッカーへのサービスへのアクセスを許可するための追加のステップになります。

-1

データベースに接続しようとしているパブリックサーバーにあるPHPスクリプトにパスワードを送信するために、2番目のWebサーバー(インターネット経由でアクセスできないイントラネットサーバーでも可能です)を作成するとどうなりますか?

このようにして、第2のwebseverでallowディレクティブを使用して、最初のものにのみ応答し、ほかの人のIPを拒否します。したがって、一般のアクセス可能なサーバーは決してパスワードを保存せず、必要なときにのみ要求します。 私は良いアイデアだと思いますが、どう思いますか?

+0

私はそれは幾分合理的な考えだと思う。しかし、新しい質問を回答として投稿しないでください。 –

0

としては、サーバーのルートの外にあなたのハッシュ化されたパスワードを保存することができない場合には二つの値

if ($stored === hashedPassword('my password')) { 
    ... 
} 

を比較し、その後、パスワードのSHA1を格納し、提案塩漬けと

function hashedPassword($plainPassword) { 
    $salt = '1238765&'; 
    $pepper = 'anythingelse';  
    return sha1($salt . sha1($plainPassword . $pepper)); 
} 

を浴びせと.htaccessファイルにそのファイルへのアクセスを禁止するようにApacheに指示することを忘れないでください。

<Files passwords.config.ini> 
    Order Deny,Allow 
    Deny from all 
</Files> 
関連する問題