5

単純な不正防止および否認防止システムを作成したい場合、考慮すべき重要な機能は何ですか?この質問では、私は主にデータベース行の整合性に集中しています。これはセキュリティ許可の質問ではありません。

例としてサッカーデータベースを使用すると、私が実装する主要な機能のいくつかは次のとおりです。

  1. DBAが従来のSQLを使用して行データを変更しないようにします。たとえば、データベース行に結果としてすでに2:1が格納されている場合、DBAが結果を2:3に変更すると、変更を検出できるはずです。すべての変更は、メインアプリケーションを介して行う必要があります。

  2. データの行を別の行にコピーして、バックエンドの変更を使用しないようにします。不正の変化を検出できるはずです。

システムをより不正に防止するために考慮すべき他の問題や機能はありますか?知っておくべきベストプラクティスは何ですか?任意のポインタをいただければ幸いです。

よろしくお願いします。

4

2 に答える 2

4

他の列の暗号署名である1つの列を作成します。IDが署名の計算に含まれている限り、IDが変更されるため、行をコピーすることはできません。ハッシュを再計算せずに変更を実行することはできないため、DBAの変更も検出可能です。

これは、DBAが行を削除する問題に対処するものではありません。注意してください。これは、個々の行が適切なビジネスロジックを通過したことを検証するだけです。テーブル全体の署名を含めることもできますが、それはかなり重くなり始めます。

もちろん、ある時点で秘密が必要になります。署名キーの秘密の部分です。あなたのコードはそれにアクセスする必要があります...そしてそのコードを書く人は誰でも自分自身に秘密鍵などを電子メールで送るための裏口を含めることができます。遅かれ早かれあなたは誰かを信頼しなければならないでしょう。(もちろん、異なるチームから複数の署名を適用することもできます。そのため、何かを偽造するには、チームが共謀する必要があります。)

于 2010-07-04T07:21:59.283 に答える
2

完全に率直に言うと、あなたは時間を無駄にしているのです。

DBAには、データベースへのルートアクセスと同等のアクセス権があります。そうでなければ、それらはかなり効果がないでしょう。同じ問題がシステム管理者にも発生し、基本的にあなたができることはせいぜいプラセボにすぎません。そのレベルのアクセス権を持つ悪意のある人物についてできることは、そもそもアクセス権を与えないことだけです。

あなたができる最善のことは、監査証跡を作成することによってそれを少し難しくすることです。ユーザーがログイン、ログアウトするとき、ユーザーが何をするか、システムがどのイベントに応答するかなどを記録します。これの唯一の本当の価値は、手動で入って後でそれを見ることにした場合に起こったことを(うまくいけば)再構築できることです。

サッカーの試合の結果を変えることに関しては、それがどのくらい起こりそうかを自問してください。もちろん、実際にはサッカーの試合の結果は変わりません。記録方法を変えるだけです。それを見たり参加したりした人は誰でも実際の結果を知っているので、システム上でそれを変更する人にはどのような価値がありますか?

企業では、エラーと悪意があり、調整プロセスによって処理されます。株式仲買人には、システムの内容に関するレポートを実行し、実際に行われた銀行取引と比較するチームがあります。不一致がある場合は、赤のフラグが付けられます。したがって、システムのバランスを変更することはできますが、バックアップされます。

このパズルの他の部分は、DBAアクティビティの制限が実際には問題を解決しないということです。アプリケーション開発者は任意のコードをリリースできます。たとえレビューされたとしても、システムはビルドエンジニアや、変更されたバージョンをコンパイルして実行している本番環境へのルートレベルのアクセス権を持つ誰かで故障する可能性があります。

于 2010-07-04T07:23:31.183 に答える