ASP.NET میں جعلسازی (ایکس ایس آر ایف/ سی ایس آر ایف) کے تحفظ کی درخواست

جب صفحے کی تازہ کاری :
صفحہ تخلیق تاریخ :

ماحول

بصری سٹوڈیو
  • بصری سٹوڈیو 2019
ASP.NET کور
  • 3.0
  • 3.1

کیا کراس سائٹ کی درخواست forgeri ہے ؟

کراس سائٹ کی درخواست بھول (CSRF/XSRF) ان لوگوں کے لئے ہے جو صرف دلچسپی کی سائٹ کے اندر عملدرآمد کر رہے ہیں. ایک ایسے خطرے پر حملہ جو بیرونی سائٹ سے اس طرح کے اپ ڈیٹ کے عمل کو انجام دیتا ہے.

مثال کے طور پر ، فرض کریں کہ آپ کو ایک ویب سائٹ پر تبصرے پوسٹ کرنے کی صلاحیت ہے. عام طور پر ، مجھے لگتا ہے کہ آپ سائٹ سے ایک تبصرہ داخل کر کے پوسٹ کریں گے ، یہ بھیجنے کا عمل اکثر ہدف URL پر ڈیٹا پھینک دینے کے لئے استعمال کیا جاتا ہے.

لہذا ، اگر آپ ہدف سائٹ کے علاوہ کسی دوسرے سے URL کو اسی طرح کے اعداد و شمار بھیجتے ہیں ، تو یہ وہی علاج ہے جو آپ نے پوسٹ کیا.

اگر صرف ایک حملہ آور ایسا کرے گا تو یہ خطرہ نہیں ہوگا ۔ CSRF بارے میں خوفناک بات یہ ہے کہ حملہ آوروں جعلی سائٹس کی تعمیر یا سائٹ میں پوشیدہ یو آر ایل کو شامل کر سکتے ہیں. یہ ہے جہاں کوئی اور غیر ارادی طور پر اس تک رسائی حاصل کرتا ہے اور ایک حملہ آور بن جاتا ہے.

میں یہاں گہرائی میں نہیں جاؤں گا ، لہذا براہ کرم کراس سائٹ کی درخواست کے بارے میں مزید جانیں.

ASP.NET کور اس امتضاد کو فریم ورک میں شامل کرتے ہیں ۔

کام کرنے کے لئے کراس سائٹ کی درخواست کی جانچ پڑتال کریں

یہ دیکھنے کی کوشش کریں کہ اپ ڈیٹ کے عمل کو اصل میں بیرونی سائٹس یا آلات سے کارکردگی کا مظاہرہ کیا جاتا ہے.

اشاریہ. cshtml ایک ان پٹ فارم بناتا ہے جو آپ کو سرور میں داخل کردہ متن بھیجتا ہے. پھر ویودات رکھیں تاکہ سرور ان پیغامات کو دکھاتا ہے جو آپ نے ان پٹ متن سے ملنے کے لئے تخلیق کیا ہے.

Index. cshtml

@{
  ViewData["Title"] = "Home Page";
}

<div class="text-center">
  <h1 class="display-4">Welcome</h1>
  <p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
</div>

<form method="post">
  <input type="text" name="text" />
  <button type="submit">送信</button>
</form>

<p>@ViewData["Message"]</p>

سرور سائڈ HomeController.cs کو بھیجا گیا متن عمل کرتا ہے اور اسے بصری اسٹوڈیو ٹریس میں نتائج. ایک ہی متن کو ویودات میں مقرر کریں تاکہ یہ کلائنٹ کو دکھایا جا سکے.

HomeController.cs

public class HomeController : Controller
{
  // 省略

  [HttpPost]
  public IActionResult Index(string text)
  {
    System.Diagnostics.Trace.WriteLine($"「{text}」が入力されました。");
    ViewData["Message"] = $"「{text}」が入力されました。";
    return View();
  }

  // 省略
}

صرف عام مراحل میں پیدا کردہ فعالیت کو انجام دینے کی کوشش کریں. جب آپ ٹھیک چلتے ہیں اور اسکرین ظاہر ہوتی ہے تو ، متن درج کریں اور جمع بٹن پر کلک کریں ۔

عملدرآمد کا متن اسکرین پر متوقع طور پر ظاہر ہوتا ہے ۔

کیونکہ یہ بھی ہے ٹریس کرنے کے لئے پیداوار ، بصری سٹوڈیو آؤٹ پٹ ونڈو بھی متن دکھاتا ہے. اصل میں ، ہم ایک ڈیٹا بیس میں ان پٹ کے اعداد و شمار کو رجسٹر کرنے جیسی چیزیں کرتے ہیں ، لیکن ہم یہاں کوڈ کو آسان بنانے کے لئے نہیں جا رہے ہیں.

اب ، ٹھیک اور چل رہا ہے جبکہ ہدف کی سائٹ سے باہر پروگرام تک رسائی حاصل کرنے کی کوشش کریں. سادگی کے لئے ، میں بصری سٹوڈیو کوڈ نامی ایک آلہ کا استعمال کرتے ہوئے ایک پوسٹ پوسٹ کروں گا. اگر آپ پوسٹ بھیج سکتے ہیں ، تو آپ دیگر ٹولز استعمال کرسکتے ہیں یا حملے کے لئے دوسری سائٹ پروگرام بنا سکتے ہیں ۔

جب آپ بصری سٹوڈیو کوڈ میں ایک توسیع کا نام نصب کرتے ہیں تو ، آپ ایک خصوصیت کا استعمال کرسکتے ہیں جو آپ کو صرف http فائل کھولنے کے ذریعے باقی API کے آپریشن کو آسانی سے چیک کرنے کی اجازت دیتا ہے.

جب آپ ایک ٹیکسٹ فائل میں مندرجہ ذیل کی طرح ایک http فائل بناتے ہیں ، اور پھر بصری اسٹوڈیو کوڈ میں فائل کھولیں ، آپ درخواست بھیجیں پر کلک کر کے حاصل یا پوسٹ بھیج سکتے ہیں ۔

اگر آپ مندرجہ ذیل پوسٹ کے اعداد و شمار بناتے ہیں ، تو آپ کو اسکرین پر ٹیکسٹ ٹائپ کرنے کے طور پر اعداد و شمار کے تقریبا ایک ہی رقم بھیجے جائیں گے اور جمع کریں بٹن دبائیں. (لوکل ہوسٹ پورٹ نمبر کو پھانسی کے ماحول کے طور پر ایک ہی ہونا چاہئے.)

تکیہ ٹیسٹ. http://www.restTest.http

### Form で POST 送信
POST https://localhost:44372/home/index HTTP/1.1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW

------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="text"

なんらかのテキスト
------WebKitFormBoundary7MA4YWxkTrZu0gW--

جب آپ اسے بھیجتے ہیں ، تو آپ یہ دیکھ سکتے ہیں کہ سرور ٹیکسٹ وصول کررہا ہے اور اسے پروسیسنگ کرتا ہے.

بصری سٹوڈیو کوڈ نتائج حاصل کر سکتے ہیں. اگر آپ نتیجہ کوڈ پر قریبی نظر ڈالیں تو ، آپ دیکھ سکتے ہیں کہ ویودات کے لئے مقرر کردہ قیمت ظاہر کی گئی ہے. (یہ یونیکوڈ میں دکھایا گیا ہے ، لیکن ایک ویب براؤزر میں دیکھا جاتا ہے تو متن صحیح طریقے سے دکھایا جاتا ہے.)

ایڈریس کراس سائٹ کی درخواست forgeri خطرے

جیسا کہ میں نے شروع میں ذکر کیا تھا ، ASP.NET بنیادی طور پر فریم ورک میں کراس سائٹ کی درخواست کے خلاف اقدامات شامل ہیں. ایک عام پیمائش ایک اسکرین پر پہلے کلائنٹ کو ایک منفرد ٹوکن جاری کرنا ہے جو پوسٹ ، وغیرہ کی ضرورت ہوتی ہے. جب تک آپ پیش کار کو ٹوکن پھینک دیں تو آپ کو عمل کاری قبول نہیں کرنا پڑے گا ۔

یقینا ، اگر آپ براہ راست ایک بیرونی سائٹ سے یو آر ایل تک رسائی حاصل کرتے ہیں تو ، ٹوکن نامعلوم ہے اور پروسیسنگ کو قبول نہیں کرے گا.

سب سے پہلے ، میں کلائنٹ (ایچ ٹی ایم ایل) کو ٹوکن جاری کرنے کے بارے میں بات کرنا چاہتا ہوں ، لیکن حقیقت یہ ہے کہ فریم ورک ایسا کرنے کے قابل نہیں ہے. جائیں گے. اگر آپ فارم ٹیگ میں پوسٹ کے طریقہ کار کی وضاحت کرتے ہیں تو ، آپ کو اجازت کے بغیر ایچ ٹی ایم ایل میں ٹوکن پیرامیٹرز شامل کر سکتے ہیں.

ذیل میں ایچ ٹی ایم ایل میں ، یہ ان پٹ نام = "__RequestVerificationToken" کی قسم = "پوشیدہ" ہے. جب بھیجنے کے بٹن پر زور دیا جاتا ہے تو یہ سرور کو مل کر بھیجا جاتا ہے. ویسے, یہ طریقہ حاصل کی طرف سے منسلک نہیں ہے.

سرور کی طرف ، Startup.cs کی خدمات ۔ ادکونٹروللرسواٹہویوس طریقہ اختیارات ۔ فلٹر کو اوٹووالاداٹیانٹیفورگریطوکاناٹرابٹی ، تمام اعمال یہ ٹوکن چیک خود کار طریقے سے شامل کیا جاتا ہے (پوسٹ ، ڈال ، پیچ ، اور حذف کے HTTP طریقوں کو درست کرنے کے لئے).

اگر آپ اس رکاوٹ کو صرف مخصوص اعمال میں شامل کرنا چاہتے ہیں ، تو تمام اعمال ، فی کنٹرولر ، فی کارروائی یہ بھی سیٹ کرنے کے لئے ممکن ہے.

اس کے برعکس ، اگر آپ زیادہ تر اعمال پر پابندیاں عائد کرنا چاہتے ہیں ، لیکن آپ مخصوص اعمال کو خارج کرنا چاہتے ہیں ، اگر آپ اگنورینٹیفورگریطوکان وصف کو کنٹرولر اور عمل میں مرتب کرتے ہیں تو ٹھیک ہے ۔

Startup.cs

public void ConfigureServices(IServiceCollection services)
{
  services.AddControllersWithViews(options =>
  {
    // 全ての「POST, PUT, PATCH, DELETE」アクションに自動で ValidateAntiForgeryToken を付与。
    // 個別に除外したい場合は「IgnoreAntiforgeryToken」属性を指定すること
    // API では HTML 側にトークンを発行できないのでコントローラーに「IgnoreAntiforgeryToken」を指定する必要がある。
    options.Filters.Add(new Microsoft.AspNetCore.Mvc.AutoValidateAntiforgeryTokenAttribute());
  });
}

دیکھتے ہیں کہ یہ کیسے کام کرتا ہے. سب سے پہلے ، ٹرانسمیشن عمل عام طور پر سکرین سے کیا جاتا ہے.

نتائج کی توقع کے طور پر سکرین پر ظاہر کیا گیا تھا.

یہ بھی ہے ٹریس کرنے کے لئے پیداوار.

اب ، ہم باہر سے اس تک رسائی حاصل کرنے کی کوشش کرتے ہیں.

رسائی ایڈی ، لیکن خراب درخواست واپس آئی تھی. یہ ایک مختلف نتیجہ ہے جب آپ اقدامات نہیں لے رہے ہیں. یہ پتہ ہے کہ یہ ٹریس کرنے کے لئے آؤٹ پٹ نہیں ہے کیونکہ یہ محفوظ ہے کہ سمجھا جاتا ہے.

خلاصہ

اس بار میں نے کراس سائٹ کی درخواست کے خلاف اقدامات کو لاگو کرنے کی کوشش کی. یہ لاگو کرنے کے لئے بہت آسان تھا کیونکہ یہ پہلے سے ہی فریم ورک میں بنایا گیا تھا.

ویب سائٹ کی تعمیر CSRF کے مقابلے میں بہت زیادہ خطرے کی ضرورت ہے. آپ چیک کر سکتے ہیں کہ وہاں کیا ہے ، یا آپ اپنی سائٹ میں خطرات کی جانچ پڑتال کرنے کے لئے اوواسپ جیسے آلات استعمال کرسکتے ہیں.