-4

ユーザーがゲームをプレイできる Web アプリケーションを開発しています。ユーザーが勝った場合、彼女は自分のアカウントにお金を受け取ります。一方、ユーザーがゲームに負けた場合、彼女もお金を失います。「稼いだお金の合計」と「失ったお金の合計」のデータをデータベースに保存する必要があります。

問題は、悪意のあるユーザーがデータベースにアクセスした場合、そのユーザーが「稼いだお金の合計」と「失ったお金の合計」をすべて変更できることです。これは大きな問題です。

一見、「稼いだお金の合計」と「失ったお金の合計」を暗号化することで、この問題を完全に回避できると思っていましたが、突然、この架空の悪意のあるユーザーは常にそれらの値を任意の値に変更できるため、これは機能しないことに気付きました。欲求。

この質問は、「ユーザーがデータベースにアクセスするのを防ぐ方法」に関するものではなく、「悪意のあるユーザーがデータベースにアクセスした場合、データが変更されるのを防ぐにはどうすればよいですか?」に関するものです。

4

3 に答える 3

6

これは基本的なサーバー セキュリティです。誰かが書き込み権限を持つユーザーとして MySQL データベースにログインした場合、あなたにできることは何もありません。事前に停止する必要があります。

実行できる手順:

1) 強力なサーバー パスワードとユーザー アカウントの設計を使用します。root として SSH を使用しないでください。これは簡単な例です。

2) アプリケーションが必要とするデータベースへのアクセスのみを許可します。たとえば、必要がない場合は、アプリケーションがテーブルを削除することを許可しないでください。これにより、少なくとも起こりうる被害が軽減されます。

3) SQL インジェクションから保護されていることを確認してください。これはおそらく初心者が犯す最大の間違いです。

もちろん、知っておくべきことは山ほどありますが、セキュリティに関する本は生涯で読めないほどたくさんあります。1つ調べることをお勧めします。PHPコードにはEssential PHP securityを強くお勧めします。その小さく簡潔で有益です。

于 2013-07-22T18:53:34.110 に答える
3

出発点:

テーブル情報Magentoで何をするかをチェックアウトできます。sales_order

表の各行はsales_order、顧客が発行した個々の注文を表します。管理者には、管理者がこれらの注文を編集できないようにする保護メカニズムがあります。以前の注文をキャンセルして、新しいクローン注文を作成することしかできません (最初の注文を本当に「変更」する必要がある場合)。

テーブル レベルには、 という列がありますprotect_code。このコードは、注文情報オブジェクト全体の暗号化ハッシュ (md5、sha1、sha2、sha256 などのいずれかのアルゴリズムを使用したhash_hmac ) として生成されます (私は推測しています)。

加害者がアクセスできない安全なキーを使用して注文情報オブジェクトがハッシュされている場合 (たとえば、ハッカーはデータベースにアクセスしたが、PHP コードにはアクセスしていない場合)、注文情報オブジェクトの値を変更することはできません。また、ハッシュを更新する必要があり、同じセキュア キーを使用しないと、同じハッシュを取得できません。

ハッシュを再計算することで、改ざんされた行を認識することができます。

背景情報:

通常、このようなキーは PHP に保存され、ハッシュは支払いフォーム内でユーザーに提示されます。これにより、フォームを支払いゲートウェイ (別の Web サイト) に送信する前に、ユーザーが支払い情報を変更できないようになっています。

PHP アプリケーションと支払いゲートウェイ アプリケーションの両方が暗号化キーを共有します。これは、支払いゲートウェイが受信したデータをハッシュし、(ハッシュを比較して) 改ざんされていないことを確認する必要があるためです。通常、支払いゲートウェイから (専用の) 暗号化キーを受け取ります。

これは、ユーザー/ハッカーがあなたの暗号鍵を知らず、PHP サーバーにアクセスできないことを意味します (つまり、鍵を読み取ることもできません)。

使用するものはすべてアクセス可能です:

ユーザーがアプリケーションサーバーにアクセスできる場合、データベース、ファイルストレージサーバー、支払いサービス、メール送信サービスなど、すべてのサードパーティサービス (保護されているかどうかにかかわらず) にアクセスできることを意味します。ルールは、アプリケーション サーバーが他の自己ホスト型の自己完結型サービスのアグリゲーターに過ぎない場合です。

ユーザーがデータベース サーバーにはアクセスできるが、アプリケーション サーバーにはアクセスできない場合、暗号化キーは安全であり、データは検出されずに改ざんされにくい必要があります (ただし、変更や削除は難しくありません)。

アプリケーションのどこかでごくわずかなデータを使用している場合、ユーザー/ハッカーはアプリケーションサーバーにアクセスできます。つまり、彼 (ハッカー) はそのデータにアクセスできます。ユーザー/ハッカーがアクセスできる場合は、暗号化キーを別のサーバーに保存し、要求によってそれぞれを取得することもできます。アプリがそれらを使用している場合、ハッカーもそれらを使用している可能性があります。

于 2013-07-22T19:04:57.210 に答える