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

برنامه من دارای یک جعبه متن ثروتمند است که هر جاوا اسکریپت را به عنوان ورودی می گیرد و آن را برای اصلاح ذخیره می کند، بعد از آن در داخل وب سایت دیگری استفاده می شود (به عنوان مثال کد را به یک صفحه وب وارد می کند). هنگامی که برخی از کد های مخرب وارد و ذخیره می شوند، آن را در همان برنامه / صفحه مانند XSS ذخیره شده (نوع خود حمله) اجرا می شود. اما ورودی جاوا اسکریپت (بدون هیچ کدام از اصلاح / خروجی) این قابلیت است.

پرسش های من عبارتند از:

  • چه مکانیزم های امنیتی باید در محل من وجود داشته باشد؟
  • آیا دفاع حاشیه ای وجود دارد؟ (غیر از هدر X-XSS و CSP)
  • به نظر این وضعیت از دیدگاه "قابلیت و امنیت"، راه حل چیست؟

آیا ممکن است کوکی ها را بدون XSS سرقت کنم؟

این سایت از کوکی ها برای ارائه خدمات ما و نمایش آگهی های مرتبط و لیست های شغلی استفاده می کند.
با استفاده از سایت ما، شما تأیید میکنید که ما خط مشی کوکیها، خط مشی رازداری و شرایط خدمات ما را خوانده و درک کردهاید.
استفاده شما از محصولات و خدمات سرریز پشته، از جمله شبکه سرریز پشته، تحت این شرایط و ضوابط است.
                

برچسب لنگر () چگونه یک XSS ذخیره شده را انجام می دهد؟

من سعی کردم تا xss را بگیرم اما ورودی غلط سایت اما وقتی وارد https://google.com شدم این سایت این را انجام داد

 https://www.google.com 

بنابراین من به این سعی کردم [19659004] javascript: alert (7)

سایت این کار را انجام داد

: هشدار (7) 

بنابراین هر کسی فکر میکند که چگونه این فیلتر را دور بزنیم

جاوا اسکریپت – آسیب پذیری های XSS – امکان تعمیر آنها نیست

من در حال تلاش برای ساختن یک برنامه MVC هستم و گفته شده است که این روش خوبی برای بازیابی اطلاعات نیست و حساس به اسکریپت cross-site است. من هرگز امنیت ندیده ام و سعی در یادگیری هم داشته ام، اما نمی توانم سرم را در اطراف آن ببندم.

من حدس می زنم که نقص های متعددی وجود دارد. آیا کدگذاری خاصی وجود دارد که می توانم استفاده کنم؟

تمام کد را در اینجا وارد نکردم، اما سعی کردم دریابم که من می توانم حملات XSS را متوقف کنم.

Model and View Model

 The Namespace ThePeopleSearchApplication.Models
{
    کلاس UserViewModel عمومی است
    {
        UID رشته عمومی {get؛ تنظیم؛ }
        رشته عمومی FName {get؛ تنظیم؛ }
        رشته عمومی LName {get؛ تنظیم؛ }
        رشته عمومی ایمیل {get؛ تنظیم؛ }
        وضعیت عمومی {دریافت؛ تنظیم؛ }

    }

    کلاس عمومی UserModel
    {
        UID رشته عمومی {get؛ تنظیم؛ }
        رشته عمومی FName {get؛ تنظیم؛ }
        رشته عمومی LName {get؛ تنظیم؛ }
        رشته عمومی ایمیل {get؛ تنظیم؛ }
        وضعیت عمومی {دریافت؛ تنظیم؛ }
    }

}

کنترل

 نام فضای ThePeopleSearchApplication.Controllers
{
    کلاس عمومی MyController: کنترل کننده
    {
        // GET: My
        شاخص ActionResult عمومی ()
        {
            بازگشت View ()؛
        }

        [ValidateInput(false)] // اضافه شده است تا XSS را بهتر درک کند
        ActionResult عمومی SearchUserAjax (string userId)
        {
            UserModel myUser = fetchUserFromLdap (userId)؛
            بازگشت به محتوا ("{" message  ": " search for userId: "+
                           userId + "result "،  "result ": "+ convertToJson (myUser) +") ")؛
        }

        رشته خصوصی convertToJson (UserModel myUser)
        {
            بازگشت "{" userId  ": " "+ myUser.UserId +"  "، " FirstName  ": " "+
                   myUser.FirstName + ""،  "LastName ":  "" + myUser.LastName + ""،  "ایمیل ":  "" +
                   myUser.Email + ""،  "وضعیت ":  "" + myUser.Status + ""} "؛
        }

        [ValidateInput(false)] // اضافه شده است تا XSS را بهتر درک کند
        ActionResult SearchUser عمومی (userId رشته)
        {
            UserModel myUser = fetchUserFromLdap (userId)؛
            var ViewModel = UserViewModel جدید
            {
                UID = userID،
                FName = myUser.FirstName
                LName = myUser.LastName
                ایمیل = myUser.Email،
                وضعیت = myUser.Status،
            }؛
            بازگشت this.View (viewModel)؛
        }

        خصوصی UserModel fetchUserFromLdap (رشته userId)
        {
            var retVal = جدید UserModel ()؛
            اگر (String.IsNullOrEmpty (userId))
            {
                retVal.UID = "N / A"؛
                retVal.FName = "N / A"؛
                retVal.LName = "N / A"؛
                retVal.Email = "N / A"؛
                retVal.Status = "N / A"؛
            }
            چیز دیگری
            {
                retVal.UID = userID؛
                retVal.FName = "FirstName"؛
                retVal.LName = "LastName"؛
                retVal.Email = "[email protected]"؛
                retVal.Status = "
وضعیت من
"؛             }             بازگشت retVal؛         }     } }

نمایش

model ThePeopleSearchApplication.Models.UserViewModel
@ {
    ViewBag.Title = "نتیجه جستجو برای کاربر:" + Model.UserId؛
    var ulId = "ul-id" + Model.UserId؛
    var formId = "فرم" + Model.UserId؛
}


     @ Scripts.Render ("~ / بسته نرم افزاری / جی کوئری")
    @ Scripts.Render ("~ / bundles / bootstrap")


نتایج جستجو برای کاربر: @ Model.UserId

  • @ Model.FirstName
  • @ Model.LastName
  • @ Model.Email
  • @ Html.Raw (Model.Status)
جستجوی آژاکس:     

مجوز XSS بدون تگ های HTML

کدام بار را می توان برای استفاده از XSS بدون استفاده از تگ های HTML <> استفاده کرد. این برچسب ها فیلتر شده اند (sanitized) و در خروجی کد گذاری می شوند.