2016-11-24 16 views
1

Checkmarxは、パスワードプロパティの文字列に関するヒープ検査の脆弱性を報告しました。このプロパティは、ログインフォームを送信するときにバインドされるモデルの一部です。フォームからパスワードをバインドするために、通常の文字列以外のものを使用する方法がASP.NET MVCにありますか?MVC viewmodelのヒープ検査の脆弱性を解決するには?

これまでは、プロパティの型をchar []またはSecureStringに変更しようとしましたが、その場合、フォームはデータをバインドしません。

public class LoginModel 
{ 
    [Required] 
    [Display(Name = "User name")] 
    public string UserName { get; set; } 

    [Required] 
    [DataType(DataType.Password)] 
    [Display(Name = "Password")] 
    public string Password { get; set; } 

    [Display(Name = "Remember me?")] 
    public bool RememberMe { get; set; } 
} 
+4

ハッカーがWebサーバのメモリへのアクセスを持っている場合、あなたはすでに別の問題を抱えています。 – CodeCaster

+0

SecureStringはそれを達成する最良の方法ですが、時間を無駄にするだけです。健康的な環境ではほとんど不可能です。 –

+1

関連:[SecureStringはこれまでC#アプリケーションで実用的でしたか?](http://stackoverflow.com/questions/26190938/is-securestring-ever-practical-in-ac-sharp-application)、[Heap Inspection Security Vulnerability] (http://stackoverflow.com/questions/30341327/heap-inspection-security-vulnerability)。 – CodeCaster

答えて

-3

CheckMarxができない、それをキャッチするだろう「alienSecurity」のような何か他のもの...にパスワードフィールドの名前を変更し、それはそれだ:)

0

利用SecureStringの代わりに文字列を。

SecureStringインスタンスは、Stringよりも多くのデータ保護を提供します。 1文字ずつの文字列から文字列を作成する場合、Stringは複数の中間をメモリに作成しますが、SecureStringはただ1つのインスタンスを作成します。

Stringオブジェクトのガベージコレクションは非決定的です。さらに、メモリが固定されていないため、ガベージコレクタはメモリの移動と圧縮時にString値の追加コピーを作成します。対照的に、SecureStringオブジェクトに割り当てられたメモリは固定されており、そのメモリはDisposeメソッドを呼び出すことで解放できます。

https://msdn.microsoft.com/en-us/library/system.security.securestring(v=vs.110).aspx

関連する問題