دو روز گذشته( ۲۳ مهر ۱۳۹۳ ) گروهی از کارشناسان گوگل اشکالی امنیتی در پروتکل امنیتی SSL 3.0 پیدا کردند که باعث میشود افراد مهاجم بتوانند اطلاعات کدشده میان سرور و مرورگر را بخوانند.
این اشکال امنیتی Poodle نام گرفته و برای رفع آن هیچ راه حلی به جز غیرفعال کردن SSL 3.0 رور مرورگر وجود ندارد.
موزیلا اعلام کرد که در نگارش ۳۵ فایرفاکس این پروتکل را به طور کلی غیرفعال خواهد کرد. گوگل نیز اعلام کرد برنامه دارد تا این پروتکل را در آیندهای نزدیک از کروم حذف کند.
در حالت عادی، بریز متادیتای خود را از سرور دریافت میکند. ولی میتوان از یک فایل جاوا اسکریپتی نیز آنرا فراهم کرد. ظاهرا این روش مناسبترین روش برای خواندن متا دیتا میباشد.
مزایای بارگذاری متادیتا از طریق یک فایل جاوااسکریپتی
در ابتدا فایل metadata.js را در مسیر Scripts ایجاد نمایید و ارجاعی به آن را در layaout.cshtml قرار دهید:
کارهایی را که باید انجام بدهیم:
2- ایمپورت متادیتای جاوااسکریپتی در سمت کلاینت:
ما متا دیتای تولید شدهی در سرور را گرفته و در یک متغیر جاوااسکریپتی قرار میدهیم و محتویات این متغیر را در MetadataStore ایمپورت میکنیم.
مزایای بارگذاری متادیتا از طریق یک فایل جاوااسکریپتی
- کاهش سایز متادیتا (برای اپلیکشن خودم، سایز متادیتای دریافتی از سرور، 105 کیلوبایت بود و بعد از ایجاد این فایل اسکریپتی و اعمال کردن gzip به آن، به 10 کیلو بایت کاهش یافت.)
- بارگذاری سریعتر برنامه
-کش کردن فایل جاوااسکریپتی
در ابتدا فایل metadata.js را در مسیر Scripts ایجاد نمایید و ارجاعی به آن را در layaout.cshtml قرار دهید:
<script src="~/Scripts/metadata.js"></script>
کارهایی را که باید انجام بدهیم:
1- ایجاد متادیتا در سمت سرور:
1.1- دریافت متادیتا از دیتابیس
1.2-stringify های متادیتا
1.3 -نوشتن متادیتا در فایل metadata.js
private static void WriteMetadata() { var metadata = new EFContextProvider<ApplicationDbContext>().Metadata();//1.1 var fileName =HttpContext.Current.Server.MapPath("~/Scripts/metadata/metadata.js"); const string prefix = "var metadata = JSON.stringify(";//1.2 const string postfix = ");"; using (var writer = new StreamWriter(fileName)) { writer.WriteLine(prefix + metadata + postfix);//1.3 } }
2.1- غیرفعال کردن متادیتای سرور.
2.2- ایمپورت کردن متغیر metadata که به صورت سراسری در اپلیکشن قابل دسترسی میباشد.
2.3 -ایجاد کردن EntityManager.
var serviceName = 'breeze/northwind'; // your service root here function createEntityManager() { var dataService = new breeze.DataService({ serviceName: serviceName, hasServerMetadata: false // 2.1 }); var metadataStore = new breeze.MetadataStore({ namingConvention: camelCaseConvention // if you use this convention }); // initialize it from the application's metadata variable metadataStore.importMetadata(metadata);//2.2 return new breeze.EntityManager({ dataService: dataService, metadataStore: metadataStore });//2.3 }
در قسمت قبل، تغییرات Migrations، در EF Core 1.0 بررسی و گردش کاری آن به همراه مثالهایی ارائه شدند. در این قسمت یک سری از نکات تکمیلی EF Core Migrations را بررسی خواهیم کرد.
انتقال Context و Migrations به یک اسمبلی دیگر
تا اینجا اگر مثال بررسی شده را دنبال کرده باشید، دو پوشهی Entities و Migrations را به همراه فایلهای موجودیتها، Context برنامه و Migrations آنها، در همان پروژهی اصلی برنامه، خواهید داشت:
در ادامه قصد داریم بانک اطلاعاتی آزمایشی برنامه را drop کرده، پوشهی Migrations را حذف و صرفا دو فایل ApplicationDbContextSeedData و DBInitialization آنرا نگه داریم.
کلاس Person را به اسمبلی جدید Entities و کلاس ApplicationDbContext را به اسمبلی جدید DataLayer منتقل میکنیم:
اسمبلی جدید Core1RtmEmptyTest.Entities از نوع NET Core Class Library. است و صرفا حاوی کلاسهای موجودیتهای برنامهاست.
اسمبلی جدید Core1RtmEmptyTest.DataLayer نیز از نوع NET Core Class Library. بوده و حاوی تعاریف Context برنامه، به همراه Migrations و تنظیمات آن خواهد بود.
تا اینجا با این نقل و انتقالات، نیاز است وابستگیهای DataLayer را اصلاح کنیم. بنابراین فایل project.json آنرا گشوده و به نحو ذیل تکمیل نمائید:
به این صورت ارجاعی به اسمبلی Core1RtmEmptyTest.Entities به پروژه اضافه شدهاست (تا کلاس Person در ApplicationDbContext شناسایی شود) به همراه وابستگیهای EF و SQL Server که مورد نیاز Context برنامه هستند.
وابستگی Microsoft.Extensions.Configuration.Abstractions برای کار با IConfigurationRoot اضافه شدهاست (دسترسی به تنظیمات برنامه از طریق تزریق وابستگیها).
به علاوه اکنون به پروژهی وب اصلی مراجعه کرده و فایل project.json آنرا جهت افزودن ارجاعاتی به این دو اسمبلی جدید، ویرایش کنید:
به این ترتیب Startup برنامه میتواند محل جدید کلاس ApplicationDbContext را شناسایی کند و برنامه کامپایل شود.
فعال سازی Migrations و قرار دادن فایلهای آن در اسمبلی Core1RtmEmptyTest.DataLayer
در ادامه اگر مانند قسمت قبل بخواهیم مهاجرتها را اضافه کنیم، به خطای ذیل خواهیم رسید:
برای حل این مشکل، بجای اینکه دستور فوق را از مسیر src\Core1RtmEmptyTest صادر کنیم که همان ریشهی اصلی پروژهی وب است، اینبار باید دستور را از ریشهی پروژه DataLayer صادر کنیم. اما اگر چنین کاری را انجام دهیم، پیام یافتن نشدن فایل اجرایی ابزارهای خط فرمان EF را دریافت میکنیم:
علت اینجا است که باید مجددا فایل Core1RtmEmptyTest.DataLayer\project.json را گشوده و این ابزارها را در آن فعال کنیم:
پس از فعال سازی ابزارهای EF در پروژهی DataLayer، اکنون باز هم موفق به اجرای دستور فوق نخواهیم شد:
عنوان میکند که پروژهی startup را نمیتواند پیدا کند، برای حل این مشکل، دستور را به نحو ذیل ویرایش کنید:
در اینجا با ذکر صریح startup-project، عملیات تولید فایلهای Migrations با موفقیت انجام شدند:
اعمال کلاسهای Migrations تولید شده به بانک اطلاعاتی
پس از تولید موفقیت آمیز فایلهای مهاجرت، برای اعمال آنها به بانک اطلاعاتی، اینبار نیز دستور را از همان پوشهی DataLayer با پارامتر پروژهی آغازین اجرا میکنیم:
در اینجا نیز ذکر پارامتر startup-project جهت اجرای موفقیت آمیز دستور الزامی است.
بنابراین به صورت خلاصه
- ابتدا قسمت tools تنظیمات پروژهی data layer را برای فعال سازی دستورات خط فرمان EF ویرایش کنید.
- سپس از طریق خط فرمان به پوشهی data layer وارد شوید. اینبار باید دستورات EF را از ریشهی این پوشه، بجای پوشهی اصلی برنامه صادر کرد.
- در اینجا دستورات افزودن مهاجرتها و به روز رسانی بانک اطلاعاتی، همانند قبل هستند. فقط ذکر محل واقع شدن پوشهی آغازین برنامه توسط پارامتر startup-project الزامی است.
انتقال Context و Migrations به یک اسمبلی دیگر
تا اینجا اگر مثال بررسی شده را دنبال کرده باشید، دو پوشهی Entities و Migrations را به همراه فایلهای موجودیتها، Context برنامه و Migrations آنها، در همان پروژهی اصلی برنامه، خواهید داشت:
در ادامه قصد داریم بانک اطلاعاتی آزمایشی برنامه را drop کرده، پوشهی Migrations را حذف و صرفا دو فایل ApplicationDbContextSeedData و DBInitialization آنرا نگه داریم.
کلاس Person را به اسمبلی جدید Entities و کلاس ApplicationDbContext را به اسمبلی جدید DataLayer منتقل میکنیم:
اسمبلی جدید Core1RtmEmptyTest.Entities از نوع NET Core Class Library. است و صرفا حاوی کلاسهای موجودیتهای برنامهاست.
اسمبلی جدید Core1RtmEmptyTest.DataLayer نیز از نوع NET Core Class Library. بوده و حاوی تعاریف Context برنامه، به همراه Migrations و تنظیمات آن خواهد بود.
تا اینجا با این نقل و انتقالات، نیاز است وابستگیهای DataLayer را اصلاح کنیم. بنابراین فایل project.json آنرا گشوده و به نحو ذیل تکمیل نمائید:
{ "version": "1.0.0-*", "dependencies": { "Core1RtmEmptyTest.Entities": "1.0.0-*", "Microsoft.EntityFrameworkCore": "1.0.0", "Microsoft.EntityFrameworkCore.SqlServer": "1.0.0", "Microsoft.Extensions.Configuration.Abstractions": "1.0.0", "NETStandard.Library": "1.6.0" }, "frameworks": { "netstandard1.6": { "imports": "dnxcore50" } } }
وابستگی Microsoft.Extensions.Configuration.Abstractions برای کار با IConfigurationRoot اضافه شدهاست (دسترسی به تنظیمات برنامه از طریق تزریق وابستگیها).
به علاوه اکنون به پروژهی وب اصلی مراجعه کرده و فایل project.json آنرا جهت افزودن ارجاعاتی به این دو اسمبلی جدید، ویرایش کنید:
{ "dependencies": { // same as before "Core1RtmEmptyTest.Entities": "1.0.0-*", "Core1RtmEmptyTest.DataLayer": "1.0.0-*" } }
فعال سازی Migrations و قرار دادن فایلهای آن در اسمبلی Core1RtmEmptyTest.DataLayer
در ادامه اگر مانند قسمت قبل بخواهیم مهاجرتها را اضافه کنیم، به خطای ذیل خواهیم رسید:
D:\Prog\1395\Core1RtmEmptyTest\src\Core1RtmEmptyTest>dotnet ef migrations add InitialDatabase Your target project 'Core1RtmEmptyTest' doesn't match your migrations assembly 'Core1RtmEmptyTest.DataLayer'. Either change your target project or change your migrations assembly.
D:\Prog\1395\Core1RtmEmptyTest\src\Core1RtmEmptyTest.DataLayer>dotnet ef migrations add InitialDatabase No executable found matching command "dotnet-ef"
{ // same as before "tools": { "Microsoft.EntityFrameworkCore.Tools": { "version": "1.0.0-preview2-final", "imports": [ "portable-net45+win8" ] } }, // same as before }
D:\Prog\1395\Core1RtmEmptyTest\src\Core1RtmEmptyTest.DataLayer>dotnet ef migrations add InitialDatabase Could not invoke this command on the startup project 'Core1RtmEmptyTest.DataLayer'. This preview of Entity Framework tools does not support commands on class library projects in ASP.NET Core and .NET Core applications.
D:\Prog\1395\Core1RtmEmptyTest\src\Core1RtmEmptyTest.DataLayer>dotnet ef --startup-project ../Core1RtmEmptyTest/ migrations add InitialDatabase Done. To undo this action, use 'dotnet ef migrations remove'
اعمال کلاسهای Migrations تولید شده به بانک اطلاعاتی
پس از تولید موفقیت آمیز فایلهای مهاجرت، برای اعمال آنها به بانک اطلاعاتی، اینبار نیز دستور را از همان پوشهی DataLayer با پارامتر پروژهی آغازین اجرا میکنیم:
D:\Prog\1395\Core1RtmEmptyTest\src\Core1RtmEmptyTest.DataLayer>dotnet ef --startup-project ../Core1RtmEmptyTest/ database update Applying migration '13950527070105_InitialDatabase'. Done.
بنابراین به صورت خلاصه
- ابتدا قسمت tools تنظیمات پروژهی data layer را برای فعال سازی دستورات خط فرمان EF ویرایش کنید.
- سپس از طریق خط فرمان به پوشهی data layer وارد شوید. اینبار باید دستورات EF را از ریشهی این پوشه، بجای پوشهی اصلی برنامه صادر کرد.
- در اینجا دستورات افزودن مهاجرتها و به روز رسانی بانک اطلاعاتی، همانند قبل هستند. فقط ذکر محل واقع شدن پوشهی آغازین برنامه توسط پارامتر startup-project الزامی است.
نظرات اشتراکها
معرفی کتابخانهی DNTCaptcha.Core
- امکان غیرفعال کردن کوکیها در مرورگرها هست.
- امکان انباشته شدن بیش از حد کوکیها در کش مرورگر هم هست که اجازهی نوشته شدن کوکیهای جدید را نمیدهد. خصوصا برای کسانیکه کل session جاری مرورگر را حفظ میکنند و با هربار باز شدن مرورگر، همان حالت قبلی را بازیابی میکنند.
- امکان انباشته شدن بیش از حد کوکیها در کش مرورگر هم هست که اجازهی نوشته شدن کوکیهای جدید را نمیدهد. خصوصا برای کسانیکه کل session جاری مرورگر را حفظ میکنند و با هربار باز شدن مرورگر، همان حالت قبلی را بازیابی میکنند.
اشتراکها
تغییرات امنیتی در SignedXml دات نت
یکی از کاربردهای متداول SignedXml، «تولید مجوز استفاده از برنامهها» است و اخیرا به دلیل نقص امنیتی که در آن پیدا شده بود، وصلهای برای آن صادر شدهاست. این وصله به همراه تغییراتی مانند غیرفعال کردن XPath Transform به صورت پیش فرض است.
اشتراکها
روش غیرفعال کردن موقتی ReSharper
آیا میشود برای نسخه core هم کاری کرد که کاربر بتواند بصورت دستی تسکی را به دلخواه در زمانهای متفاوت زمانبندی کند یا غیرفعال کند؟ بطور مثال به تسک x از امروز تا سه روز دیگر نیاز دارد آنرا امروز فعال کند و سه روز بعد بصورت دستی آنرا غیر فعال نماید .
- این فایل باید به ازای هربار تغییر در مدلها دوباره ساخته شود. بنابراین تولید دوباره آن نباید غیرفعال شود.
- Assembly.GetExecutingAssembly().Location برای برنامههای دسکتاپ مفید است (یعنی مسیر فایل اجرایی). در برنامههای وب، به این مسیر عموما دسترسی ندارید. به همین جهت بهتر است از HttpRuntime.AppDomainAppPath استفاده کنید.
- Assembly.GetExecutingAssembly().Location برای برنامههای دسکتاپ مفید است (یعنی مسیر فایل اجرایی). در برنامههای وب، به این مسیر عموما دسترسی ندارید. به همین جهت بهتر است از HttpRuntime.AppDomainAppPath استفاده کنید.
سلام؛ راهی وجود داره که لینک فایلهای css و js رو در source page مرورگر غیرفعال کرد ؟
و امکان اینکه فرد با کلیک روی لینک محتوای فایلهای css و js رو نبینه .
با تشکر .
و امکان اینکه فرد با کلیک روی لینک محتوای فایلهای css و js رو نبینه .
با تشکر .
نظرات مطالب
فشرده سازی خروجی فایلهای استاتیک سایت
سلام و تشکر
از روش جناب صالحی هم استفاده کردم اما جواب نداد... سوالی که الان برام ایجاد شده اینه که آیا ممکنه هاست من استفاده از فشرده سازی رو غیرفعال کرده باشه؟
و اینکه آیا مگر کش کردن و فشرده سازی مقولههای جدایی نیستند؟!
با تشکر