osoviejo उत्तम जवाब देने के लिए नीचे दिए गए निर्देशों मेरी हाल ही में blog post on CSRF से जोड़ने के लिए, अपने काम को एक साथ रखा में जानकारी के साथ एक व्यापक जवाब में फिल का ब्लॉग।
एएसपी.नेट/एमवीसी इसके लिए एक तंत्र प्रदान करता है: आप वैश्विक FilterProviders
ऑब्जेक्ट पर फ़िल्टर के संग्रह में जोड़ सकते हैं। यह आपको कुछ सुरक्षा नियंत्रकों को लक्षित करने की अनुमति देता है, न कि दूसरों को, आवश्यक सुरक्षा सुविधा जोड़ना।
सबसे पहले, हमें एक IFilterProvider को लागू करने की आवश्यकता है। नीचे, आप फिल हैक की Conditional Filter Provider कक्षा पा सकते हैं। इस परियोजना को अपनी परियोजना में जोड़कर शुरू करें।
public class ConditionalFilterProvider : IFilterProvider
{
private readonly
IEnumerable<Func<ControllerContext, ActionDescriptor, object>> _conditions;
public ConditionalFilterProvider(
IEnumerable<Func<ControllerContext, ActionDescriptor, object>> conditions)
{
_conditions = conditions;
}
public IEnumerable<Filter> GetFilters(
ControllerContext controllerContext,
ActionDescriptor actionDescriptor)
{
return from condition in _conditions
select condition(controllerContext, actionDescriptor) into filter
where filter != null
select new Filter(filter, FilterScope.Global, null);
}
}
फिर, Application_Start कि वैश्विक FilterProviders संग्रह सुनिश्चित करता है कि सभी पोस्ट नियंत्रक तरीकों AntiForgeryToken की आवश्यकता होगी के लिए एक नया ConditionalFilterProvider
कहते हैं करने के लिए कोड जोड़ें।
IEnumerable<Func<ControllerContext, ActionDescriptor, object>> conditions =
new Func<ControllerContext, ActionDescriptor, object>[] {
// Ensure all POST actions are automatically
// decorated with the ValidateAntiForgeryTokenAttribute.
(c, a) => string.Equals(c.HttpContext.Request.HttpMethod, "POST",
StringComparison.OrdinalIgnoreCase) ?
new ValidateAntiForgeryTokenAttribute() : null
};
var provider = new ConditionalFilterProvider(conditions);
// This line adds the filter we created above
FilterProviders.Providers.Add(provider);
आप ऊपर दो कोड लागू करते हैं तो आपके MVC आवेदन साइट के लिए हर पोस्ट के लिए AntiForgeryToken से हो जाएगा। आप फिल हैक के CSRF example web site पर इसे आज़मा सकते हैं - एक बार संरक्षित होने पर, सीएसआरएफ हमला को [ValidateAntiForgeryToken]
एनोटेशन जोड़ने के बिना फेंक देगा। यह "भूलने वाले प्रोग्रामर" से संबंधित कमजोरियों के पूरे मेजबान का नियम है।
मुझे संदेह है कि यह केवल उन फॉर्मों पर आवश्यक है जो प्रवेश फॉर्म प्रदान करते हैं, जैसे लॉग इन फॉर्म या उपयोगकर्ता अधिकार प्रशासनिक रूप, या फॉर्म जो व्यक्तिगत रूप से पहचाने जाने योग्य जानकारी जैसे कि सामाजिक सुरक्षा संख्याएं और पास वाक्यांश सबमिट करते हैं। लेकिन मैं जवाब देखने के लिए तत्पर हूं। –
चूंकि सीएसआरएफ किसी को भी आपके क्रेडेंशियल्स के तहत किसी वेब एप्लिकेशन पर किसी भी क्रिया को निष्पादित करने की अनुमति दे सकता है, ऐसा लगता है कि डेटा में प्रवेश करने या संशोधित करने वाले सभी कार्यों को इसके खिलाफ सुरक्षित किया जाना चाहिए। उदाहरण के लिए, एकाउंटिंग एप्लिकेशन में एक रिकॉर्ड जोड़ना। –
वे, निश्चित रूप से, पहले आपके प्रमाण पत्र की आवश्यकता होगी। :) –