امنیت جی کوئری آژاکس در asp.net تماس می گیرد

من می خواهم یک سوال کوچکی در مورد ajax jquery در asp.net بپرسم و این زمانی است که ما با ajax تماس می گیریم که در انتهای سرویس باز است و آن را مانند یک جذابیت کار می کند اما مشکل این است که آیا امنیت وبسایت داریم یا خیر تکنیک برای برقراری تماس آژاکس امن است تا هکر نتواند به سایت حمله کند

جاوا اسکریپت – آسیب پذیری های 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)
جستجوی آژاکس:     

jwt – برنامه ی وب یک درخواست برای یک API REST زمانی که در حال تأیید صحت است

من تازه به ASP.NET هسته و OpenID اتصال / AzureAD، بنابراین من به دنبال برخی از اعتبار سنجی (و یا در غیر اینصورت) از رویکرد من است. خواندن / گوگلینگ گسترده در طول چند هفته گذشته در حالی که من در حال یادگیری این است که پاسخ دقیق نگرفته است (اگر چه بسیاری از تقریبا نادرست است)

من یک برنامه وب مبتنی بر مرورگر است که باید با آن امن AzureAD، به طوری که انتظار می رود، از این استفاده می کند. همه کارها خوب است.

همچنین یک API را در همان نرم افزار قرار می دهم. من نمیخواهم به علت نگرانی CSRF از کوکی استفاده کنم و نیاز به API برای سرویس دهی یک برنامه تلفن همراه در تاریخ بعدی است. من API را برای استفاده از JWT Bearer مبتنی بر auth پیکربندی کردم. همچنین به خوبی کار میکند (به عنوان مثال از پستمن درخواست میکند)

یکی از صفحات در برنامه وب نیاز به برقراری تماس AJAX به API دارد، و من نمیخواهم / باید برنامه را به یک SPA تبدیل کنم. بنابراین رویکردی که در حال حاضر در حال تلاش هستم این است:

وقتی وارد برنامه میشوم، حافظه (از طرف سرور) را از AzureAD دریافت میکنم. وقتی صفحه با تماس AJAX بازدید می شود، من "id_token" را به یک فیلد پنهان می نویسم و ​​هنگامی که نیاز به برقراری تماس AJAX دارم، خواندن id_token در جاوا اسکریپت و اضافه کردن آن به عنوان "مجوز" هدر.

این همه به عنوان یک رویا کار می کند، بنابراین من آن را نگران کرده ام و آن را نگران کرده ام. من نمی توانم مسائل CSRF را ببینم، چون تماس AJAX دیگر کوکی نیست. اگر چه من یک id_token را به صفحه می نویسم، کاربر باید کوکی ها را برای دیدن این صفحه در اولویت قرار دهد.

آیا چیزی است که من از آن چشم پوشی می کنم؟

xss – حمله تزریق SQL Ajax

من در مورد سیاه چاله 2007 بحث در مورد آژاکس را تماشا کردم. ارائه دهندگان این روش را انجام نمی دادند، اما کد را نشان دادند. من تعجب می کنم که چگونه SQLi را انجام خواهد داد تا تمام کاربران و رمزهای عبور و همچنین XSS را که برای استفاده از این مرورگر مورد استفاده قرار می گیرند بکشند؟

کد زیر یک روش وب بود و این تابع یک رشته عمومی بود.

 رشته عمومی updatePasswd (string userID string newPasswd) {
// اتصال به سرور SQL در اینجا
string query = "UPDATE user SET Password =" "+ newPasswd +" "WHERE User ID = '" + userID + ""'؛
slqCommand cmd = جدید SQLCommand (پرس و جو)
cmd.ExecuteNonQuery ()؛
بازگشت "Pass Updated به" + newPasswd؛
}

آیا به سادگی اضافه کردن اضافی '- به پایان پرس و جو؟