طی مقاله چک لیست تولید برنامه Asp.net mvc و بررسی امنیتی ایجکس هنگام استفاده در مورد چک لیست امنیتی
سایت سرفصلهای مهم عنوان و بررسی شده است که یکی از موارد، مقاوم ساختن وب اپلیکشن در برابر حملات CSRF میباشد. اینگونه حملات بر پایه این استراتژی شکل میگیرند که با
ارسال درخواستی به نیابت از سمت سیستم/مرورگر کاربر تایید هویت شده، سایت مقصد را مجبور
به انجام عملی کند. برای مثال اگر شما در سایت a.com یک
کاربر تایید شده باشید و هم اکنون در سایت فوق نیز لاگین باشید، مهاجم با ارسال یک برنامه/صفحه یا موارد مشابه و در قالب src یک
عکس یا با ترغیب شما با کلیک بر روی یک لینک با href آلوده یا موارد
مشابه، از سمت مرورگر شما درخواستی را به سمت سایت a.com ارسال میکند .
این درخواست ممکن است شامل حذف اطلاعات، تغییر مشخصات، پرداخت هزینه یا موارد مشابه باشد. جهت مقابله با این حمله، یکی از موارد مهم، استفاده همیشگی از Html.AntiForgeryToken() در تمامی فرمهای ورود اطلاعات است. همچنین استفاده همیشگی از متد Post و بررسی تایید مبدا درخواستهای ایجکسی، بررسی http referrer ، محدود کردن طول عمر کوکی، استفاده از کپچهای قوی مانند کپچای گوگل میتواند تا حد زیادی وب اپلیکیشن را در مورد اینگونه حملات، مصون کند.
در این بین یکی از موارد دیگر، اضافه کردن AntiForgeryToken به درخواستهای ایجکسی سایت میباشد. جهت حصول این منظور، راههای مختلفی موجود است. یکی از راه حلها استفاده از یک هلپر جهت تولید توکن مورد نظر است.
ساختار
هلپر مورد نظر به شرح زیر است :
public static class AntiForgeryToken { public static MvcHtmlString AntiForgeryTokenForAjaxPost(this HtmlHelper helper) { var antiForgeryInputTag = helper.AntiForgeryToken().ToString(); // Above gets the following: <input name="__RequestVerificationToken" type="hidden" value="some value" /> var removedStart = antiForgeryInputTag.Replace(@"<input name=""__RequestVerificationToken"" type=""hidden"" value=""", ""); var tokenValue = removedStart.Replace(@""" />", ""); if (antiForgeryInputTag == removedStart || removedStart == tokenValue) throw new InvalidOperationException("Oops! The Html.AntiForgeryToken() method seems to return something I did not expect."); return new MvcHtmlString($@"{"__RequestVerificationToken"}:""{tokenValue}"""); } }
در مرحله بعد طبق الگوی زیر، درخواست ایجکسی به همراه توکن تولید شده و به کنترلر ارسال خواهد شد:
function AddToCart(pid) { $.ajax({ url: '@Url.Action("AddToBasket","Shop")', data: { 'pid': pid,@Html.AntiForgeryTokenForAjaxPost() }, type: 'post', success:function(e) { //do something } }); }
در مرحله آخر، باید کنترلر مورد نظر شامل ویژگیهای [HttpPost] [ValidateAntiForgeryToken] باشد تا صحت توکن تولیدی را بررسی کند و در صورت نامعتبر بودن، از اجرای دستورات جلوگیری گردد.
<script src="@Url.Content("~/Scripts/Site.js")"></script>
<script src="~/Scripts/Site.js"></script>
<div @{if (myClass != null) { <text>class="@myClass"</text> } }>Content</div>
<div class="@myClass">Content</div>
<div>Content</div>
<input checked="@ViewBag.Checked" type="checkbox"/>
<input type="checkbox"/>
<div ng-repeat="item in items"> <div ng-if="setting.header">{{item.header}}</div> <div>{{item.title}}</div> <div ng-if="setting.footer">{{item.footer}}</div> </div>
<div ng-if="setting.header && setting.footer"> <div ng-repeat="item in items"> <div>{{item.header}}</div> <div>{{item.title}}</div> <div>{{item.footer}}</div> </div> </div> <div ng-if="setting.header && setting.footer==false"> <div ng-repeat="item in items"> <div>{{item.header}}</div> <div>{{item.title}}</div> </div> </div> <div ng-if="setting.header==false && setting.footer"> <div ng-repeat="item in items"> <div>{{item.title}}</div> <div>{{item.footer}}</div> </div> </div> <div ng-if="setting.header==false && setting.footer==false"> <div ng-repeat="item in items"> <div>{{item.title}}</div> </div> </div>
MongoDB #5
use DATABASE_NAME
>use mydb switched to db mydb
>db mydb
>show dbs local 0.78125GB test 0.23012GB
>db.movie.insert({"name":"tutorials point"}) >show dbs local 0.78125GB mydb 0.23012GB test 0.23012GB
حذف یک پایگاه داده در MongoDB
متد ()dropDatabase
از دستور ()db.dropDatabase برای حذف یک پایگاه داده موجود استفاده میشود.
گرامر:
گرامر پایه دستور ()dropDatabase به شکل زیر است:
db.dropDatabase()
مثال:
اول، لیست پایگاههای دادهی موجود را با استفاده از دستور show dbs ملاحظه کنید:
>show dbs local 0.78125GB mydb 0.23012GB test 0.23012GB >
>use mydb switched to db mydb >db.dropDatabase() >{ "dropped" : "mydb", "ok" : 1 } >
>show dbs local 0.78125GB test 0.23012GB >
سایت NET Core Show.
_logger.LogInformation("LogInformation");
طراحی یک ماژول IpBlocker در ASP.NET MVC
امکان چک درخواستها بر ثانیه هم موجود است؟
و چگونه به UserAgent دسترسی داریم که بتوان اطلاعات کاربر رو در بانک لاگ کرد.