ハッシュや暗号化などを下位レベルのコードの奥深くに埋め込む一般的な方法について疑問に思っています。エクスプロイトが発見されて効率が上がると、セキュリティ機能を簡単に評価して更新できるように、ある種のオブジェクトまたはマクロ規則を使用する方がよいようです。たとえば、認証を扱う PHP コード (ブログ、コード キャニオン、フレームワーク wiki など) では、次の規則が見られます。
if ($myhash !== md5(shaX($this->key) . blah($this->salt) . blah($this->var))
これを深く埋める代わりに、これはより良いのではないでしょうか
if ($myhash != MY_HASH($key))
構成ファイルまたはその他の簡単にアクセスできるオブジェクトで MY_HASH を使用して、利用可能になったときにセキュリティを強化して更新/保守を容易にしますか? 暗号化またはハッシュするナゲットを、変換関数のみを含む構成ファイルまたは特別なハッシュ ファイルに入れてみませんか?
また、データベースへのアクセスも考慮してください。PHPには非常に多くの抽象化がありますが、アプリケーションがこれを行っているのを見ています:
// grab some data from the database
if ($this->mongo_flag)
{
$this->mongo_abstraction
->where($blah1, $x)
->update($blah2);
}
elseif ($this->mysql_flag)
{
$this->mysql_abstraction
->where($blah1, $y)
->update($blah2);
}
elseif ($this->couch_flag)
{
$this->couch_abstraction
->where($blah1, $z)
->update($blah2);
}
多分 x,y,z だけが違うのでしょう。
前もって適切な db メソッドを持つオブジェクトをインスタンス化することはできません。したがって、データベース アクセスが行われるすべての場所で繰り返される if/else ロジックを排除できますか?
すなわち
$mydata = $this->db_get_method($blah1, $blah2);
また
$mydata = $DB_GET_METHOD($db_type, $blah1, $blah2);
if/else の識別が優先される場合、ネイティブ API はおそらく変更されず、抽象化はほとんど無効になるため、抽象化をスキップしてネイティブ API を使用するだけで、より効率的かつ簡単に維持できるようにする必要があるようです。 /voided は、考えられる各データベース タイプを呼び出すことによって無効化されます。か否か?
私の主な経験は、リアルタイムの組み込み C プログラミングです (多くの PHP コードは、グローバル構造体で設計された手続き型 C のように見えます)。オブジェクトがあまりにも多くの遅延や複雑さをもたらしていますか?