Web のセキュリティ上の欠点から保護するには:
被害軽減に努めます。偽造防止トークンを使用し、特定のアクションに対してのみ SSL を受け入れるようにしてください。Cookie が適切に保護されていることを確認します。全体として、攻撃面を最小限に抑え、障害物を配置して攻撃を困難にします。
ユーザー入力から保護するには:
ユーザー入力をパラメータ化します。パラメータ化やエンコードができない場合でも、エンコードには細心の注意を払ってください。多くのエクスプロイトは、不適切なエンコードが原因で発生しています。エンコーディングは、入力がどこでどのように使用されるかにも依存します。ユーザー入力を制限して検証し、サーバーが入力の特定のドメインのみを受け入れるようにします。前と同じように、入力が使用されるすべての方法を理解してください。
Web サーバーからの応答の処理:
Web サーバーから OK ステータスを取得したことを確認します。そうでない場合は、各応答を適切に処理してください。通常、jquery.ajax では、done、fail、always、および statusCode ですべての応答を処理するオプションが提供されます。これを適切に行う方法については、jquery のドキュメントを参照してください。
あなたがする必要がある3つのこと:
フォームで @Html.AntiforgeryToken() とそれに対応する [ValidateAntiForgeryTokenAttribute] 属性を使用して、クラスやメソッドを装飾します。
ユーザーからの入力を正しく処理します。そのデータに触れるすべての場所で、エンコードまたはパラメーター化、または検証、制約、または変更が必要な場合は、コンテキストを考慮する必要があります。
Web サーバーからの応答を正しく処理します。
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
public sealed class ValidateAntiForgeryTokenAttribute : FilterAttribute, IAuthorizationFilter
{
public Task< HttpResponseMessage > ExecuteAuthorizationFilterAsync(HttpActionContext actionContext, CancellationToken cancellationToken, Func< Task< HttpResponseMessage > > continuation)
{
try
{
AntiForgery.Validate();
}
catch
{
actionContext.Response = new HttpResponseMessage
{
StatusCode = HttpStatusCode.Forbidden,
RequestMessage = actionContext.ControllerContext.Request
};
return FromResult(actionContext.Response);
}
return continuation();
}
private Task< HttpResponseMessage > FromResult(HttpResponseMessage result)
{
var source = new TaskCompletionSource< HttpResponseMessage >();
source.SetResult(result);
return source.Task;
}
}