2009-08-04 3 views
3

私は今日のWebアプリケーションにいくつかのコードをリファクタリングし、すべてのウェブページのための基底クラスでこのような何かに出くわした:QueryStringをデバッグスイッチとして使用していますか?

if (Request.QueryString["IgnoreValidation"] != null) 
{ 
    if (Request.QueryString["IgnoreValidation"].ToUpper() == "TRUE") 
    { 
     SessionData.IgnoreValidation = true; 
    } 
} 

私にとって、これは非常に悪いの™のように見えるので、私は即座に削除コードからのこの旗のすべての痕跡。 1つは、フラッグの値をチェックしていたif文が数多く散在しているため、複雑で不明瞭なロジックにつながりました。第二に、私は別の、より危険な旗 "IgnoreCreditCardValidation"に遭遇しました。あなたはそれが何をしたのか推測することができます...

私はそれについて考えなければならず、以前の仕事から同様の例を思い出しました。 「安全な認証モジュール」として販売されているアプリケーションのコードには、デフォルトの動作を上書きするために使用されるQueryStringパラメータがあり、それを知っている誰でも認証をバイパスすることができます。

私の質問は、私の頭の中にあるように悪いというこの確認であるか、私は過度に反応しています。これは一般的ですか?これを行う正当な理由がある場合はありますか?私にとっては、それはちょうど怠惰と不注意のひどい組み合わせのように思える。

これが重複している場合は、私に正しい方向を教えてください。

ありがとうございます!

+0

誰もが映画のウォーゲームでバックドアを覚えていますか? –

+0

いいえ、申し訳ありません。私は2だった: –

+5

誰もあなたのドアをノックしたが、なぜ彼らの無視フラグがもはや機能しないのだろうか? –

答えて

4

これは一般的な行為であるかどうかには驚きです。極端な偏見でそれをヌークするためにあなたに+1してください。

1

私はあなたに同意します。特に、モジュールがセキュリティを強化するように設計されている場合、これはのリリースビルドを持っているばかげたことです(デバッグビルドを行うのは良い考えではありませんが、それは妥当かもしれません)。 。

+1

私は、デバッグビルドにも、私が移動した後にリリースするためにいくつかのジャスマスを有効にするかもしれないという根拠に置かないだろう。人々の頭の中に悪い考えを置くことを避ける方が良い。 –

+0

**私は**それを置くことはありません**しかし、私はそれ以上の研究なしにそれを削除しません。おそらく、いくつかのテストシステムがそれに依存しているかもしれません。あなたはあなたの行動の結果を知らずにそれを行うべきではありません。 –

+0

テストシステムがそれに依存している場合、テストシステムを書き直す必要があり、テストシステムを書いた人は誰でも騙される必要があります。 –

1

あなたではありません。誰でもそれを書いた人は、公開されているWebアプリケーションを扱ったことは一度もありません。あなたが正しく指摘したように、この「バックドア」を知っている人なら誰でもアプリケーションに大混乱を起こす可能性があります。

1

設計とテストの両方に当てはまるのは、元の開発者が怠け者になっていることです。

理想的な解決策は、コードから認証またはクレジットカード認証などを別のdll/services/etcに分けることです。実際のバージョンは、サイトのテストを容易にするためにモックで置き換えることができます。サービスは独立してテストすることもできます。

これらのモックはプロダクションサーバの近くに決して配置されないので、コードにバックドアを使用しないでください。

新しいサービスが元のものと同じインターフェイスを提供している限り、アプリケーションを更新することなく、任意の/すべてのサービスを置き換えることもできます。

1

私は穀粒に反対して、のクエリーストリングが良いデバッグスイッチを作ると言っています。

誰も私にジャンプする前に - は、検証を無効にするためにクエリ文字列を使用すると、恐ろしいほど愚かな、巨大なセキュリティホールであり、決して起こるべきではありません。あなたは完全に正当であり、コードを直ちに中傷することを正当化しました。

しかし、デバッグの場合、クエリーストリングはうまく機能します。私たちは、ページ上のいくつかのオブジェクトのIDを有効にするクエリーストリングをいくつか用意していますので、プロダクションデータベースにログインしなくてもすぐに取得できます(誰でもProd DBにアクセスできるわけではありません)。あなたはちょっと注意してインテリジェントにする必要があります。

関連する問題