2

認証システム(ログインとパスワード)を含むアプリケーション(Delphi製)があります。

このシステムはPHPであり、アプリケーションはHTTPGETメソッドを使用してPHPから結果を取得します。ログインとパスワードが正しい場合は「OK」を返し、正しくない場合は「NO」を返します。

このような...

procedure Check;
var
 x: string;
begin
 x:=Get('www.mywebsite.com/auth.php?user=xxxxxx&pass=zzzzzz');
 if x='OK' then 
  UnlockFeatures
 else
  MessageBox(0,'You're not VIP','Error',0);
end;

それは問題なく動作しますが、スニファ、パケットエディタ、またはプロキシを使用してこのシステムを回避するのは非常に簡単です。

そのため、毎回変更される情報を(PHPで)取得したいと思います。これにより、アプリケーションで同じ情報を取得できる可能性があります。

私に何ができる?

コードは必要ありません。ヒント、提案、お願いします...

ありがとう...

4

2 に答える 2

2

私はDelphi(looooooong時間前...)に精通していませんが、phpとセキュリティに関する限り:

  • 私はpost代わりにget(そしてhttps可能であれば)を使用します
  • Delphiでphpセッションを読み取ることができる場合は、ランダムな番号のセッション変数を追加し、それを非表示のフォームフィールドとして追加して送信し、セッション変数と照合することができます。
于 2012-09-27T17:15:34.170 に答える
2

一般的に、私はあなたがみんなを裏切って真新しい自転車を発明しようとしないことをお勧めします-あなたはあなたのアプローチを完全に不安定にするいくつかの愚かなエラーで99%失敗するでしょう。DVD暗号化やWin95セキュリティのような多くの優先順位がありました。DelphiとPHPの両方の既製の実装が必要な、セキュリティについて何年にもわたってテストされている、業界で承認されたメカニズムを試してみることをお勧めします。いくつかあります

  • TLS( https://プロトコル)http://en.wikipedia.org/wiki/Transport_Layer_Security-MITM攻撃からの保護はありませんが、要求どおりに聞こえ、可能な限り変更を加える必要はありません。
  • サーバーがそれをサポートする場合は、統合Windows認証を介してSSOを実装してみてください。
  • OpenIDまたはOAuth環境を設定してみてください。一般的に、それらのv.1はv.2よりも単純です。
  • HTTPから抜け出し、XMPP / Jabber認証を使用することを試みることができます。これらはセキュリティを真剣に受け止めており、PHPとDelphiのライブラリが存在します。TLSを使用するよりもはるかに安全であるべきではありませんが、愚かな攻撃者が非HTTPプロトコル(Facebookなどの外部にインターネットがない)に備えないことを望むかもしれません。
  • Bluetoothのようなアプローチを使用して、特別な「トークン」を交換して保存するためだけに、特別な接続(「ハンドシェイク」)を1回(クライアントとサーバーの両方が制御されている場合)行うことができます。これは、「制御された環境」を使用して最初の接続を確立し、いくつかのトークンを使用して、一般的なチャレンジ/レスポンス特性を使用した後の接続で「以前に会った」ことを証明する一般的な特性です。これらのトークンは、クライアント-ユーザー-サーバーの組み合わせごとに一意である必要があります。1つのサーバー(グローバルクライアント)を共有するトークンのセットを作成すると、それらは1つのクライアントから別のクライアントに簡単にコピーされ、セキュリティは残りません。
    • これらは、ほとんど重要ではないRNGの係数である可能性があります。サーバーで構築され、クライアントとサーバーの両方によって保存されます。次に、RNGシードを使用したサーバーの「チャレンジ」とクライアントは、係数を知っていることを証明して、適切なランダム値で応答する必要があります。
    • それらは非対称暗号である可能性があり、トークンはランダムな「メッセージ」であり、サーバーはクライアントの暗号化キーを送信し、それらによって暗号化された正しいメッセージを期待します。または、トークンはパスワードであり、サーバーはランダムなテキストを生成し、正しい暗号デジタル署名を期待します。返されます。例として、 Torry.netでencyptionライブラリを見つけることができます。Lockbox3とSpring4Delphiは、いくつかの暗号化標準を実装するDelphi用の最もテストされ注目されている暗号ライブラリの1つです。

あなたの優先順位を考慮し、あなたの選択をしてください。更新されていないクライアントとの下位互換性をまったく気にせずに、後で1つのキーターンですべての認証レイヤーを切り替えることができるでしょうか。最も単純なものを選択し、必要な場合にのみ後で拡張することができます。ユーザーがアップグレードに怠惰な場合は、後で安全でない実装を無効にする実用的な方法がないため、最初から最も安全なアプローチを選択することをお勧めします。

于 2012-09-28T07:07:08.630 に答える