मैंने अपने एप में शमन को लागू कर दिया है CSRF हमलों के बाद लागू किया है जो मैंने इंटरनेट पर कुछ ब्लॉग पोस्ट पर पढ़ा है। विशेष रूप से ये पद मेरे कार्यान्वयन के चालक रहे हैं
- ASP.NET और वेब उपकरण डेवलपर सामग्री टीम से ASP.NET MVC के लिए सर्वोत्तम अभ्यास
- क्रॉस-साइट रिक्वेस्ट फॉरगिरी अटैक का एनाटॉमीफिल हैक ब्लॉग से
- ASP.NET MVC फ्रेमवर्क में AntiForgeryToken - Html.AntiForgeryToken और ValidateAntiForgeryToken विशेषता डेविड हेडन ब्लॉग से
मूल रूप से उन लेखों और सिफारिशों में कहा गया है कि सीएसआरएफ हमले को रोकने के लिए किसी को भी निम्नलिखित कोड लागू करना चाहिए:
1) [ValidateAntiForgeryToken]
POST Http क्रिया को स्वीकार करने वाली प्रत्येक क्रिया पर जोड़ें
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SomeAction( SomeModel model ) {
}
2) <%= Html.AntiForgeryToken() %>
हेल्पर को उन रूपों में जोड़ें जो डेटा को सर्वर में जमा करते हैं
<div style="text-align:right; padding: 8px;">
<%= Html.AntiForgeryToken() %>
<input type="submit" id="btnSave" value="Save" />
</div>
मेरे ऐप के कुछ हिस्सों में वैसे भी मैं jax के साथ Ajax POSTs सर्वर पर कर रहा हूँ, बिना किसी फॉर्म के। यह उदाहरण के लिए होता है जहां मैं उपयोगकर्ता को एक विशिष्ट कार्रवाई करने के लिए एक छवि पर क्लिक करने के लिए दे रहा हूं।
मान लीजिए कि मेरे पास गतिविधियों की सूची के साथ एक तालिका है। मेरे पास तालिका के एक स्तंभ पर एक छवि है जो कहती है "मार्क गतिविधि को पूरा करें" और जब उपयोगकर्ता उस गतिविधि पर क्लिक करता है तो मैं निम्नलिखित नमूने में Ajax POST कर रहा हूं:
$("a.markAsDone").click(function (event) {
event.preventDefault();
$.ajax({
type: "post",
dataType: "html",
url: $(this).attr("rel"),
data: {},
success: function (response) {
// ....
}
});
});
मैं <%= Html.AntiForgeryToken() %>
इन मामलों में कैसे उपयोग कर सकता हूं ? क्या मुझे अजाक्स कॉल के डेटा पैरामीटर के अंदर सहायक कॉल शामिल करना चाहिए?
लंबी पोस्ट के लिए क्षमा करें और मदद करने के लिए बहुत बहुत धन्यवाद
संपादित करें :
जयरडब जवाब के अनुसार मैंने निम्नलिखित तरीके से उपयोग किया है
$("a.markAsDone").click(function (event) {
event.preventDefault();
$.ajax({
type: "post",
dataType: "html",
url: $(this).attr("rel"),
data: {
AddAntiForgeryToken({}),
id: parseInt($(this).attr("title"))
},
success: function (response) {
// ....
}
});
});