この文書は2016年以降更新されていません
.NET セキュリティに関するチートシート
最終改訂日 (yy/mm/dd):2015/03/29 はじめにこのページは、.NET のセキュリティに関する簡単で基本的なヒントを開発者に提供することを目的としています。 .NET Framework.NET Framework は、Microsoft のエンタープライズ開発向け主要プラットフォームです。.NET Framework は、ASP.NET、Windows デスクトップアプリケーション、Windows Communication Foundation サービス、SharePoint、Visual Studio Tools for Office、その他のテクノロジをサポートする API です。 .NET Framework の更新.NET Framework は、Microsoft の Windows Update サービスによって最新の状態に保たれます。開発者が別途 .NET Framework を更新する必要は通常ありません。Windows Update には、Windows Updateまたは Windows 搭載コンピューターの Windows Update プログラムからアクセスできます。 個々のフレームワークを更新するには、NuGet を使用します。Visual Studio は更新を促すメッセージを表示するので、ライフサイクルに組み込んでください。 サードパーティのライブラリは個別に更新する必要があり、Nuget を使用しないものもあるので注意してください。たとえば、ELMAH は別途更新する必要があります。 .NET Framework のガイダンス.NET Framework は、高度な型システム、データ、グラフィック、ネットワーク、ファイル処理、および Microsoft エコシステムでの企業アプリケーションの開発に必要とされるその他大部分のものをサポートする一連の API です。.NET Framework は、アセンブリレベルで厳密な名前とバージョンが設定されたほぼユビキタスなライブラリです。 データアクセス
暗号化
全般
ASP.NET Web フォームのガイダンスASP.NET Web フォームは、.NET Framework 対応の最初のブラウザーベースアプリケーション開発用 API で、今でも最も一般的な Web アプリケーション開発用エンタープライズプラットフォームです。
protected override OnInit(EventArgs e) { base.OnInit(e); ViewStateUserKey = Session.SessionID; } Viewstate を使用しない場合は、ASP.NET Web フォームの既定のテンプレートの既定のマスターページにある、二重送信 Cookie を使用した手動の CSRF 防止トークンを使用してください。 private const string AntiXsrfTokenKey = "__AntiXsrfToken"; private const string AntiXsrfUserNameKey = "__AntiXsrfUserName"; private string _antiXsrfTokenValue; protected void Page_Init(object sender, EventArgs e) { // 次のコードは XSRF 攻撃からの防御に役立ちます。 var requestCookie = Request.Cookies[AntiXsrfTokenKey]; Guid requestCookieGuidValue; if (requestCookie != null && Guid.TryParse(requestCookie.Value, out requestCookieGuidValue)) { // Cookie の XSRF 防止トークンを使用します。 _antiXsrfTokenValue = requestCookie.Value; Page.ViewStateUserKey = _antiXsrfTokenValue; } else { // 新しい XSRF 防止トークンを生成して Cookie に保存します。 _antiXsrfTokenValue = Guid.NewGuid().ToString("N"); Page.ViewStateUserKey = _antiXsrfTokenValue; var responseCookie = new HttpCookie(AntiXsrfTokenKey) { HttpOnly = true, Value = _antiXsrfTokenValue }; if (FormsAuthentication.RequireSSL && Request.IsSecureConnection) { responseCookie.Secure = true; } Response.Cookies.Set(responseCookie); } Page.PreLoad += master_Page_PreLoad; } protected void master_Page_PreLoad(object sender, EventArgs e) { if (!IsPostBack) { // XSRF 防止トークンを設定します。 ViewState[AntiXsrfTokenKey] = Page.ViewStateUserKey; ViewState[AntiXsrfUserNameKey] = Context.User.Identity.Name ?? String.Empty; } else { // XSRF 防止トークンを検証します。 if ((string)ViewState[AntiXsrfTokenKey] != _antiXsrfTokenValue || (string)ViewState[AntiXsrfUserNameKey] != (Context.User.Identity.Name ?? String.Empty)) { throw new InvalidOperationException("Validation of Anti-XSRF token failed."); } } }
<httpRuntime enableVersionHeader="false" />
HttpContext.Current.Response.Headers.Remove("Server"); HTTP の検証とエンコード
フォーム認証
ASP.NET MVC のガイダンスASP.NET MVC (モデルビューコントローラー) は、Web フォームポストバックモデルよりもさらに標準化された HTTP 通信を使用する最新の Web アプリケーションフレームワークです。
MvcHandler.DisableMvcResponseHeader = true;
HttpContext.Current.Response.Headers.Remove("Server");
if (MembershipService.ValidateUser(model.UserName, model.Password)) { FormsService.SignIn(model.UserName, model.RememberMe); if (IsLocalUrl(returnUrl)) { return Redirect(returnUrl); } else { return RedirectToAction("Index", "Home"); } }
<% using(Html.Form(“Form", "Update")) { %> <%= Html.AntiForgeryToken() %> <% } %> さらに、コントローラーメソッドでは次のコードを使用します。
[ValidateAntiForgeryToken] public ViewResult Update() { // gimmee da codez }
XAML のガイダンス
Windows フォームのガイダンス
WCF のガイダンス
Authors and Primary EditorsBill Sempf - bill.sempf(at)owasp.org Other CheatsheetsDeveloper Cheat Sheets (Builder)
Assessment Cheat Sheets (Breaker)
Mobile Cheat Sheets OpSec Cheat Sheets (Defender) Draft Cheat Sheets
|