مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

mohammad-zarei62

عضویت از 1396/12/18

خطای A potentially dangerous Request.Form value was detected from the client هنگام استفاده از رمزنگاری

  • شنبه 13 مرداد 1397
  • 22:38
تشکر میکنم

سلام دوستان من از رمزنگاری خودکار فیلد های مخفی استفاده کردم. و مشکل من اینه که هنگام استفاده از ckeditor ارور A potentially dangerous Request.Form value was detected from the client رو میده. فیلدی که باید html بگیره رو در مدل alowhtml کردم.

ارور در این خط از کلاس DecryptingControllerFactory میده:

var parameters = requestContext.HttpContext.Request.Params;

کل کد کلاس DecryptingControllerFactory اینه:

using System;
using System.Linq;
using System.Web.Mvc;

namespace Labkhand.Helpers
{
    public class DecryptingControllerFactory : DefaultControllerFactory
    {
        private readonly IEncryptSettingsProvider _settings;

        public DecryptingControllerFactory()
        {
            _settings = new EncryptSettingsProvider();
        }

        public override IController CreateController(System.Web.Routing.RequestContext requestContext, string controllerName)
        {
            var parameters = requestContext.HttpContext.Request.Params;
            var encryptedParamKeys = parameters.AllKeys.Where(x => x.StartsWith(_settings.EncryptionPrefix)).ToList();

            IRijndaelStringEncrypter decrypter = null;

            foreach (var key in encryptedParamKeys)
            {
                if (decrypter == null)
                {
                    decrypter = GetDecrypter(requestContext);
                }

                var oldKey = key.Replace(_settings.EncryptionPrefix, string.Empty);
                var oldValue = decrypter.Decrypt(parameters[key]);
                if (requestContext.RouteData.Values[oldKey] != null)
                {
                    if (requestContext.RouteData.Values[oldKey].ToString() != oldValue)
                        throw new ApplicationException("Form values is modified!");
                }
                requestContext.RouteData.Values[oldKey] = oldValue;
            }

            if (decrypter != null)
            {
                decrypter.Dispose();
            }

            return base.CreateController(requestContext, controllerName);
        }

        private IRijndaelStringEncrypter GetDecrypter(System.Web.Routing.RequestContext requestContext)
        {
            var decrypter = new RijndaelStringEncrypter(_settings, requestContext.GetActionKey());
            return decrypter;
        }

    }
}

برای رمزنگاری خودکار فیلد های مخفی هم از اینجا کمک کرفتم

زمانی که این رمزنگاری رو از فایل global حذف می کنم مشکل حل میشه. ولی من نیاز دارم که از این رمزنگاری استفاده کنم

پاسخ های این پرسش

تعداد پاسخ ها : 3 پاسخ
کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • یکشنبه 14 مرداد 1397
  • 08:01

باید به ستونی که برای اون Editor گذاشتید صفت AllowHtml بدید

کاربر سایت

mohammad-zarei62

عضویت از 1396/12/18

  • یکشنبه 14 مرداد 1397
  • 09:40

ممنون. ولی من allowhtml کردم. زمانی که دستی یک مقدار html رو در کنترلر وارد می کنم مشکلی نیست. مشکل اینجاست که وقتی این مقدار بصورت request می خواد بیاد توی کنترلر اول گذرش به کلاس      DecryptingControllerFactory

می خوره و توی این کلاس و در خط 18 دیگه نگاه نمیکنه که اون فیلد در مدل allowhtml هست یا نه. فقط گیر میده که تو داری html می فرستی. من میخوام توی خط 18 خونسرد باشه و به این موضوع گیر نده.

کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • یکشنبه 14 مرداد 1397
  • 11:10

متوجه شدم 

تحقیق میکنم اگر به نتیجه رسیدم حتما بهتون اطلاع میدم 

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)