VahidN / DNTCaptcha.Core

DNTCaptcha.Core is a captcha generator and validator for ASP.NET Core applications

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

دریافت خطای ۴۰۰ و عدم بارگذاری تصویر کپچا بر روی مرورگر فایرفاکس وقتی نرم افزار بر روی سرور منتشر شود

reisi-h opened this issue · comments

Summary of the issue

هنگام توسعه و بر روی IIS Express تصاویر کپچا بر روی مرورگر فایرفاکس و سایر مرورگرها به درستی نمایش داده میشه ولی وقتی برنامه را بر روی سرور نهایی پابلیش می کنم با استفاده از سایر مرورگرها مثل کروم و اوپرا تصاویر کپچا به درستی لود و نمایش داده می شود اما با استفاده از مرورگر فایرفاکس به خطای
400 Bad Request
بر می خورم. ممنون میشم اگر برای رفع این خطا کمک کنید
از حالت Session کامپوننت استفاده می کنم
از آخرین نسخه مرورگر فایرفاکس یعنی ۹۶ استفاده می کنم بر روی ویندوز ۱۰

Environment

DNTCaptcha.Core version: 4.2.0
.NET Core SDK version: netcoreapp3.1
IDE: Visual Studio 2019

Example code/Steps to reproduce:


Output:

Exception message:
Full Stack trace:
  • خروجي response را كه مشاهده كنيد عنوان مي‌كند نمي‌تواند اطلاعات دريافتي را deserialize كند.
  • چرا سه بار اين كامپوننت را روي صفحه قرار داديد؟
  • خروجي response را كه مشاهده كنيد عنوان مي‌كند نمي‌تواند اطلاعات دريافتي را deserialize كند.
    بله در خروجی این عبارت درج شده است : Couldn't deserialize the model.
  • چرا سه بار اين كامپوننت را روي صفحه قرار داديد؟
    به دلیل اینکه سه فرم مجزای لاگین، ثبت نام و فراموشی کلمه عبور در این صفحه وجود دارد

چرا این مشکل بر روی سایر مرورگرها رخ نمیده؟ برای حل این مشکل راه حلی هست؟
بازم ممنون

UseCookieStorageProvider را هم آزمايش كنيد

UseCookieStorageProvider را هم آزمايش كنيد

بابت پاسخ سریع و راهنمایی های شما بسیار ممنون و سپاسگذارم

سلامت باشيد. كار كرد اين روش دوم؟

سلامت باشيد. كار كرد اين روش دوم؟

به محض تغییر و اعمال بر روی سرور خبر میدم

سلامت باشيد. كار كرد اين روش دوم؟

کپچا را با استفاده از UseCookieStorageProvider تنظیم کردم و بر روی سرور پابلیش کردم ولی متاسفانه نتیجه مثل قبله
مرورگر فایرفاکس تصویر را لود نمی کنه ولی سایر مرورگرها به راحتی و سریع تصویر را لود می کنند!!

کدهای بخش کانفیگ سرویس کپچا به صورت زیره :

services.AddDNTCaptcha(options =>
            {
                options.UseCookieStorageProvider(SameSiteMode.Strict)
                .AbsoluteExpiration(minutes: 10)
                .ShowThousandsSeparators(false)
                .WithEncryptionKey("xxxxx")
                .WithNoise(10, 5)
                .InputNames(
                    new DNTCaptchaComponent
                    {
                        CaptchaHiddenInputName = "DNT_CaptchaText",
                        CaptchaHiddenTokenName = "DNT_CaptchaToken",
                        CaptchaInputName = "DNT_CaptchaInputText"
                    })
                .Identifier("dnt_Captcha");
            });

نکته بعدی که برام سوال پیش اومد اینه که من ۳ تا کپچا در صفحه مورد نظر ایجاد کردم ولی ۶ تا کوکی ایجاد شده؟! این عملکرد طبیعیه؟

با سلام خدمت مهندس نصیری عزیز و تشکر بابت مطالبی که مدت هاست در سایت برای عموم قرار میدید و همه از جمله بنده استفاده های زیادی از مطالب و سایت حضرت عالی کردم.

بنده از پکیج DNTCaptcha.Core بارها در پروژه هام استفاده کردم و هیچ مشکلی هم نداشتم باهاش.
اخیرا پروژه ای که توسط کس دیگه ای نوشته شده بود رو برای تغییر و پشتیبانی به بنده سپردن.
.net core 3.1
َApi, web
DNTCaptcha.Core 4.3.3
طبق روال گذشته و به صورت ساده ازین پکیج استفاده کردم
services.AddDNTCaptcha();
اما خطایی مبنی بر زیر میداد:
options..WithEncryptionKey("...")
که به Git پروژه مراجعه کردم و دیدم ظاهرا باید کانفیگ بشه و تنظیمات رو انجام دادم.
اما بلافاصله چند روزیه که با این مشکل مواجهم که همه چیر کار میکنه اما تصویر کپچا نمایش داده نمیشه و خطای زیر رو دارم در لاگ:
Failed to show the captcha image.

DNTCaptcha.Core.DNTCaptchaImageController: Error: Failed to show the captcha image.

System.Security.Cryptography.CryptographicException: Padding is invalid and cannot be removed.
at Internal.Cryptography.UniversalCryptoDecryptor.DepadBlock(Byte[] block, Int32 offset, Int32 count)
at Internal.Cryptography.UniversalCryptoDecryptor.UncheckedTransformFinalBlock(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount)
at Internal.Cryptography.UniversalCryptoTransform.TransformFinalBlock(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount)
at System.Security.Cryptography.CryptoStream.FlushFinalBlockAsync(Boolean useAsync)
at System.Security.Cryptography.CryptoStream.FlushFinalBlock()
at System.Security.Cryptography.CryptoStream.Dispose(Boolean disposing)
at System.IO.Stream.Close()
at System.IO.BinaryWriter.Dispose(Boolean disposing)
at System.IO.BinaryWriter.Dispose()
at DNTCaptcha.Core.CaptchaCryptoProvider.decrypt(Byte[] data) in D:\Prog\1395\DNTCaptcha.Core\src\DNTCaptcha.Core\CaptchaCryptoProvider.cs:line 130
at DNTCaptcha.Core.CaptchaCryptoProvider.Decrypt(String inputText) in D:\Prog\1395\DNTCaptcha.Core\src\DNTCaptcha.Core\CaptchaCryptoProvider.cs:line 54
at DNTCaptcha.Core.DNTCaptchaImageController.Show(String data) in D:\Prog\1395\DNTCaptcha.Core\src\DNTCaptcha.Core\DNTCaptchaImageController.cs:line 16
2
!
3
1
2
3
4
5
1
5

لطفا راهنمایی کنید.

خطاي «Padding is invalid and cannot be removed.» به اين معنا است كه اطلاعات اين كپچا به نحو صحيحي به سرور ارسال نمي‌شود. يعني قسمتي از query string اي كه بايد به سمت سرور ارسال شود، ناقص شده. ممكن است در بين راه فيلتري داريد، يا ممكن است روي صفحه زمانيكه اطلاعات رندر مي‌شوند، چيزي در بين راه مثلا XyZ را تبديل به xyz مي‌كند يا حتي آن‌را ناقص مي‌كند. مثلا ممكن است سعي كرده باشيد اطلاعات html نمايش داده شده‌ي در صفحه را compress كرده باشيد و مثلا فواصل بين تگ‌ها را كاهش داده باشيد يا حتي فيلتر anti-xss گذاشته باشيد تا يكسري از اطلاعات ورودي را حذف كند. اين‌ها سبب مي‌شوند كه اصل ديتاي اين كچپا ناقص شود. يا حتي ممكن است روي سرور محدوديت طول كوئري استرينگ گذاشته باشيد و امثال اين‌ها.

بسیار بسیار ممنونم از راهنمایی شما.
مشکل از قسمت زیر در startup.cs بود که حل شد.
services.Configure<RouteOptions>(options => { options.LowercaseUrls = true; options.LowercaseQueryStrings = true; });

فقط یک سوال اینکه:
با توجه به اینکه این پروژه رو یک نفر مبتدی توسعه داده و همه ی لایه ها توی هم قرار دارن و در اصل هیچ لایه بندی در کار نیست و کل پروژه از همین startup استفاده میکنه و عبارت بالا در قسمت API استفاده میشده و الان که با کپجا کانفلکت پیدا کرد و بنده کامنتش کردم، میشه با چیزی جایگزینش کرد که مشکل هر دو قسمت حل بشه؟

قسمت «LowercaseQueryStrings » هيچ وقت نبايد استفاده شود. اين مورد بر روي محتواي كوئري‌ استرينگ‌ها تاثير گذار است؛ براي مثال در حالت رمزنگاري اطلاعات، اصل ديتا را تخريب مي‌كند.

مجددا متشکرم بابت راهنمایی و پاسخ سریع شما.