مطالب
مایکروسافت crash analysis tool خود را سورس باز کرد

مایکروسافت ابزار اتوماسیون آنالیز کرش و خطرات امنیتی حاصل از آن‌را که پیش‌تر در تیم‌های داخلی خودش مورد استفاده قرار می‌گرفت، سورس باز کرد.


برای نمونه از این ابزار در طی سال‌های 2005 تا 2006 جهت بررسی کدهای ویندوز ویستا بهره‌ برداری شده و توسط آن بیش از 300 باگ امنیتی پیش از سوء استفاده از آن‌ها کشف و برطرف گردیده است. این ابزار اطلاعات حاصل از یک کرش را بررسی کرده و باگ‌های امنیتی ممکن آن‌را گوشزد می‌کند.

صفحه‌ی اصلی پروژه در CodePlex
exploitable Crash Analyzer

و دمویی در مورد فلسفه‌ی وجودی و کاربردهای این ابزار
دریافت

پاسخ به بازخورد‌های پروژه‌ها
نشان دادن گزارش قبل از ذخیره یا چاپ
این مساله یعنی IE دسترسی نمایش Adobe رو بسته. برای رفع آن:
الف) در IE به منوی Tools -> Manage add-ons مراجعه کنید. آیا افزونه‌های Adobe فعال هستند؟
ب) تنظیمات امنیتی IE را در حالت پیش فرض قرار بدید
Tools -> Internet Options -> Security tab -> Reset all zones to default level


ولی در کل پیشنهاد من پیاده سازی روش توضیح داده شده جهت استفاده از Active-X شرکت Adobe در WPF است. یکبار مراحل آن‌را قدم به قدم طی کنید.
مطالب
رمزنگاری JWT و افزایش امنیت آن در ASP.NET Core
آموزش JSON Web Token (به اختصار JWT) و پیاده سازی آن در برنامه‌های ASP.NET Core درسایت موجود است.
توکن JWT در حالت عادی به صورت Base64 رمزنگاری می‌شود که این نوع رمزنگاری به راحتی قابل رمزگشایی و خواندن است. سایت‌های آنلاین زیادی برای رمزگشایی base64 موجود است؛ برای مثال کافی است توکن خود را در سایت jwt.io کپی کنید و به راحتی محتوای بدنه توکن (Payload) را مشاهده کنید.

پس توکن JWT هیچ امنیتی در برابر خوانده شدن ندارد.
ساده‌ترین راه حل، رمزنگاری دستی بدنه توکن می‌باشد که مثلا بر اساس کلیدی (که فقط سمت سرور نگهداری و مراقبت می‌شود) توکن را رمزنگاری کرده و به هنگام خواندن، آن را با همان کلید رمزگشایی کنیم. ولی این روش ضمن استاندارد نبودن، مشکلات خاص خودش را دارد و نیاز به سفارشی سازی زیادی، هم به هنگام تولید توکن و هم به هنگام خواندن توکن دارد.
 اصولی‌ترین راه، استفاده از رمزنگاری توکن به روش JSON Web Encryption (یا به اختصار JWE) است که در آن مشابه روش بالا ولی به صورت استاندارد تعریف شده (و قابل فهم برای همه استفاده کنندگانی که با این استاندارد آشنایی دارند) است.
نکته :
  1. اگر از JWE استفاده نمی‌کنید، بهتر است اطلاعات حساسی مانند شماره تلفن کاربر (و شاید در مواردی حتی آیدی کاربر) را در بدنه توکن قرار ندهیم چرا که قابل خوانده شدن است (که در این صورت استفاده از Guid برای آیدی کاربر می تواند کمی مفید باشد چرا که حداقل آیدی بقیه کاربران قابل پیش بینی نمی‌باشد).
  2. توکن JWT هیچ امنیتی در برابر خوانده شدن ندارد؛ ولی به لطف امضای (signature) آن، در برابر تغییر محتوا، ایمن است؛ چرا که در صورت تغییر محتوای آن، دیگر مقدار hash محتوا با امضای آن همخوانی نداشته و عملا از اعتبار ساقط می‌گردد.
برای رمزنگاری JWT باید در هر دو مرحله‌ی "تولید توکن" و "اعتبارسنجی توکن" کلید و الگوریتم لازم برای رمزنگاری را مشخص کنیم. بدین منظور در جایی که توکن را تولید می‌کنیم، خواهیم داشت :
var secretKey = Encoding.UTF8.GetBytes("LongerThan-16Char-SecretKey"); // must be 16 character or longer 
var signingCredentials = new SigningCredentials(new SymmetricSecurityKey(secretKey), SecurityAlgorithms.HmacSha256Signature);

var encryptionkey = Encoding.UTF8.GetBytes("16CharEncryptKey"); //must be 16 character
var encryptingCredentials = new EncryptingCredentials(new SymmetricSecurityKey(encryptionkey), SecurityAlgorithms.Aes128KW, SecurityAlgorithms.Aes128CbcHmacSha256);

var claims = new List<Claim>
{
   new Claim(ClaimTypes.Name, "UserName"), //user.UserName
   new Claim(ClaimTypes.NameIdentifier, "123"), //user.Id
};

var descriptor = new SecurityTokenDescriptor
{
   Issuer = _siteSetting.JwtSettings.Issuer,
   Audience = _siteSetting.JwtSettings.Audience,
   IssuedAt = DateTime.Now,
   NotBefore = DateTime.Now.AddMinutes(_siteSetting.JwtSettings.NotBeforeMinutes),
   Expires = DateTime.Now.AddMinutes(_siteSetting.JwtSettings.ExpirationMinutes),
   SigningCredentials = signingCredentials,
   EncryptingCredentials = encryptingCredentials,
   Subject = new ClaimsIdentity(claims)
};

var tokenHandler = new JwtSecurityTokenHandler();
var securityToken = tokenHandler.CreateToken(descriptor);
string encryptedJwt = tokenHandler.WriteToken(securityToken);
کد بالا، مانند کد تولید یک توکن jwt معمولی است؛ تنها تفاوت آن، ایجاد و معرفی شیء encryptingCredentials است.
در خط چهارم، آرایه بایتی کلید لازم برای رمزنگاری (encryptionkey) گرفته شده و از روی آن encryptingCredentials ایجاد شده‌است. این کلید باید 16 کاراکتر باشد؛ در غیر اینصورت به هنگام تولید توکن، خطا دریافت خواهید کرد. رمزنگاری توکن، توسط این کلید و الگوریتم مشخص شده انجام خواهد شد.
سپس شیء تولید شده، به خاصیت EncryptingCredentials کلاس SecurityTokenDescriptor معرفی شده‌است و  نهایتا متد tokenHandler.WriteToken توکن رمزنگاری شده‌ای را تولید می‌کند.
نتیجه کار این است که توکن تولید شده، بدون کلید مربوطه (که سمت سرور نگهداری می‌شود) قابل رمز گشایی نیست و اگر آن را در سایت jwt.io کپی کنید، جوابی دریافت نخواهید کرد.

در ادامه لازم است در مرحله اعتبار سنجی و رمزگشایی توکن در سمت سرور، کلید و الگوریتم لازم را به آن معرفی کنیم تا middleware مربوطه بتواند توکن دریافتی را رمزگشایی و سپس اعتبار سنجی کند. بدین منظور در متد ConfigureServices کلاس Startup.cs خواهیم داشت:

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
   var secretkey = Encoding.UTF8.GetBytes("LongerThan-16Char-SecretKey");
   var encryptionkey = Encoding.UTF8.GetBytes("16CharEncryptKey");

   var validationParameters = new TokenValidationParameters
   {
      ClockSkew = TimeSpan.Zero, // default: 5 min
      RequireSignedTokens = true,

      ValidateIssuerSigningKey = true,
      IssuerSigningKey = new SymmetricSecurityKey(secretkey),

      RequireExpirationTime = true,
      ValidateLifetime = true,

      ValidateAudience = true, //default : false
      ValidAudience = "MyWebsite",

      ValidateIssuer = true, //default : false
      ValidIssuer = "MyWebsite",

      TokenDecryptionKey = new SymmetricSecurityKey(encryptionkey)
   };

   options.RequireHttpsMetadata = false;
   options.SaveToken = true;
   options.TokenValidationParameters = validationParameters;
});

کد بالا مانند کد فعال سازی احراز هویت توسط JWT معمولی در ASP.NET Core است؛ با این تفاوت که:

ابتدا آرایه بایتی همان کلید رمزنگاری (encryptionkey) که قبلا توکن را با آن رمزنگاری کرده بودیم، گرفته شده و سپس توسط مقداردهی خاصیت TokenDecryptionKey کلاس TokenValidationParameters، معرفی شده است. 

ولی شاید این سؤال برایتان پیش آید که چرا الگوریتم رمزنگاری مشخص نشده است؟ پس سرور از کجا می‌فهمد که این توکن بر اساس چه الگوریتمی رمزنگاری شده است؟ 

دلیل آن این است که به هنگام تولید توکن، اسم الگوریتم مربوطه، داخل بخش header توکن نوشته می‌شود. اگر تصویر قبل را مشاهده کنید مقدار header توکن به شرح زیر است.

{
  "alg": "A128KW",
  "enc": "A128CBC-HS256",
  "typ": "JWT"
}

پس سرور بر اساس این قسمت از توکن (header)، که هیچگاه رمزنگاری نمی‌شود، می‌فهمد که توسط چه الگوریتمی باید توکن را رمزگشایی کند که در اینجا A128CBC-HS256 (اختصار AES-128-CBC و HMAC-SHA256) است.

مثال کامل و قابل اجرای این مطلب را می‌توانید از این ریپازیتوری دریافت کنید.

مسیرراه‌ها
ASP.NET MVC
              اشتراک‌ها
              چگونه در پروژه‌های سورس باز مشارکت کنیم؟

              Complete Guide to Open Source - How to Contribute 
              ⭐️ Course Contents ⭐️
              ⌨️ (00:00) Introduction
              ⌨️ (01:11) What is Open Source
              ⌨️ (01:46) Why you should care about Open Source
              ⌨️ (04:06) What is Git
              ⌨️ (04:56) What is GitHub
              ⌨️ (05:24) Example custom GitHub profile
              ⌨️ (06:01) GitHub features
              ⌨️ (13:37) GitHub Actions for Continuous Integration (CI)
              ⌨️ (14:49) Insights tab for more project information
              ⌨️ (15:04) GitHub Discussions for threaded conversations
              ⌨️ (15:41) GitHub Projects board like Trello
              ⌨️ (16:10) GitHub Wiki
              ⌨️ (17:15) How to find Open Source projects
              ⌨️ (19:40) How to write Markdown
              ⌨️ (27:58) Draft a Pull Request (PR)
              ⌨️ (29:06) Make money directly with GitHub Sponsors
              ⌨️ (30:15) Make money indirectly from Open Source
              ⌨️ (32:19) freeCodeCamp.org Open Source resources
              ⌨️ (34:04) Everyone is a Project Maintainer
              ⌨️ (39:49) How to customize your GitHub profile
              ⌨️ (40:46) Conclusion 

              چگونه در پروژه‌های سورس باز مشارکت کنیم؟
              اشتراک‌ها
              سری آموزشی Blazor C# Tutorials

              Blazor C# Tutorials
              30 videos

              In this playlist, I am going through all the fundamentals and sharing my journey to be a full stack Blazor developer. This is the future of web development in ASP.NET world. If you want to learn Blazor this is the best place to start.

              1. Build Your First App - EP01
              2. Getting Started - EP02
              3. #Routing - EP03
              4. Dependency #Injection - EP04
              5. Forms & #Validations - EP05
              6. JavaScript #Interop - EP06
              7. #Razor #Components | Re-usability - EP07
              8. Razor Components | #Lifecycle Methods - EP08
              9. Razor Component #Libraries - EP09
              10. Call #REST #API - #CRUD Methods - EP10
              11. #Authentication | Out of the box- EP11
              12. Custom AuthenticationStateProvider - EP12
              13. Layouts | Login Pages - EP13
              14.  HttpClient | Login User
              15. IHttpClientFactory | Login User
              16. Sending JWT token & Request Middleware
              17. Handling Exceptions 

              سری آموزشی Blazor C# Tutorials
              اشتراک‌ها
              بررسی روش ساخت برنامه‌های چندمستاجری در ASP.NET Core

              Jon P. Smith, author of Entity Framework Core in Action, explains what a multi-tenant app is and then digs into the things you need to do to make a multi-tenant app using ASP.NET Core with EF Core.

              00:00 Countdown
              02:19 Introduction and Community Links
              18:25 What are multi-tenant web applications?
              21:14 Single level multi-tenant demo
              29:00 Partitioning tenants with EF Core QueryFilter
              38:00 Admin features: creating users and tenants
              43:00 Q&A
              43:00 Hierarchical multi-tenant
              59:00 How to get started
              1:06:30 Database sharding and connection string management
              1:16:30 Scaling with Azure SQL Elastic Pools
              1:19:00 Conclusion
               

              بررسی روش ساخت برنامه‌های چندمستاجری در ASP.NET Core
              اشتراک‌ها
              کتاب Razor Components Succinctly

              OVERVIEW
              Razor components are specific building blocks within the Blazor framework. They can perform many roles: representing a specific piece of the user interface, a view component, or a tag helper; or representing a layout or an entire page. In Razor Components Succinctly, you will explore how to create and work with both simple and advanced Razor components. Longtime Succinctly author Ed Freitas will show you how to write a basic component using one-way data binding and events, and then two-way data binding, event callbacks, life cycle methods, and component references. Finally, you'll see how to enable component reuse by creating a component template.

              TABLE OF CONTENTS
              Razor Components
              Setup and Fundamentals
              Component Fundamentals
              Component Features
              Using Components
              Templating

              Author
              Ed Freitas

              ISBN
              978-1-64200-211-9

              Published on
              April 16, 2021

              Pages
              102 

              کتاب Razor Components Succinctly
              اشتراک‌ها
              پشتیبانی از NET Core 1x. این ماه به پایان می‌رسد


              Version Original Release Date Latest Patch Version Patch Release Date Support Level End of Support
              .NET Core 3.1 Scheduled for November 2019

              Will be LTS when released
              .NET Core 3.0 Scheduled for September 23, 2019

              Will be Current when released
              .NET Core 2.2 December 4, 2018 2.2.5 May 14, 2019 Current December 23, 2019
              .NET Core 2.1 May 30, 2018 2.1.11 May 14, 2019 LTS At least three years from LTS declaration (August 21, 2018)
              .NET Core 2.0 August 14, 2017 2.0.9 July 10, 2018 EOL October 1, 2018
              .NET Core 1.1 November 16, 2016 1.1.13 May 14, 2019 Maintenance June 27 2019
              .NET Core 1.0 June 27, 2016 1.0.16 May 14, 2019 Maintenance June 27 2019
              پشتیبانی از NET Core 1x. این ماه به پایان می‌رسد
              اشتراک‌ها
              شمارش تعداد خط‌های کد نوشته شده در یک پروژه
              سلام در این مطلب میخواهیم به کمک یک ابزار خیلی ساده و عالی، تعداد خط کدهایی که داخل یک پروژه نوشتیم را خیلی سریع شناسایی کنیم. برای این منظور ابتدا باید ابزار خط فرمان cloc را از اینجا دریافت کنید. بعد از دانلود، فایل را به محلی که قرار هست تعداد خط‌ها را بشمارید کپی کنید. دقت کنید که اگر قرار هست فایلی را مورد انالیز قرار دهید، فایل cloc باید در کنار آن باشد و اگر قرار هست یک پوشه را آنالیز کنید فایل cloc باید بیرون پوشه قرار بگیرد. در ادامه CMD را باز کرده و در محل موردنظر دستور زیر را وارد کنید:
              برای انالیز فایل: (x همان شماره نسخه برنامه می‌باشد مثال: cloc-1.76.exe)
              cloc-x.x.exe hello.c     
              خروجی:
                    1 text file.
                     1 unique file.
                     0 files ignored.
              
              https://github.com/AlDanial/cloc v 1.65  T=0.04 s (28.3 files/s, 340.0 lines/s)
              -------------------------------------------------------------------------------
              Language                     files          blank        comment           code
              -------------------------------------------------------------------------------
              C                                1              0              7              5
              -------------------------------------------------------------------------------  
              برای انالیز پوشه:
              cloc-x.x.exe projectDirectoryName     
              خروجی:
               16 text files.
                    15 unique files.
                     3 files ignored.
              
              https://github.com/AlDanial/cloc v 1.65  T=0.23 s (57.1 files/s, 188914.0 lines/s)
              -------------------------------------------------------------------------------
              Language                     files          blank        comment           code
              -------------------------------------------------------------------------------
              C                               10           4680           6621          30812
              C/C++ Header                     3             99            286            496
              -------------------------------------------------------------------------------
              SUM:                            13           4779           6907          31308
              -------------------------------------------------------------------------------  
              برای مثال‌های بیشتر به گیت‌هاب پروژه مراجعه کنید
              شمارش تعداد خط‌های کد نوشته شده در یک پروژه