برنامه وب – اگر رجیسترهای غیرقابل اعتماد از طرف سرور کنار گذاشته شوند، اگر از طریق document.createTextNode به داخل سند وارد شوند؟

Webapp چت. مشتریان (یعنی مرورگرهای وب) پیام هایی را به سرور ارسال می کنند که سرور آن را به تمام مشتریان مرتبط متصل می کند. کد مشتری به نظر می رسد مانند:

 اجازه دهید p = document.createTextNode ('p')
p.appendChild (document.createTextNode (پیام))
document.getElementById ('chatbox') appendChild (p)

از کجا پیام رشته دریافت شده از سرور است

مشکل در اینجا این است که به شدت توصیه میشود که داده های غیر قابل اطمینان سرور را ضدعفونی کنید تا قبل از قرار دادن آن درون سند با حذف شخصیت های خاص <، > ، ، و غیره) و جایگزینی آنها با نهادهای HTML مناسب است. به من گفته شد کد بالا برای XSS آسیب پذیر است اگر این ، ، ، ، ، ، کاراکترهای ویژه verbatim را نمایش می دهد و را نمی بینند و آنها را به صورت HTML می بینند. بنابراین ضدعفونی کردن سرور، تغییر کاراکترهای فوق به موجودات HTML باعث خواهد شد که مشتریان، نه شخصیت هایی که انسان ها قرار دارند

به این ترتیب من اعتقاد ندارم که چنین اعتبار لازم است و درست نیست زمانی که document.createTextNode () استفاده می شود.

با این حال، به من گفته شد که همیشه لازم است برای رفع نواقص سرور رشته ها. به من گفته شد که فرار از این صفات سرور همیشه ضروری است. در این صورت، من قصد داشتم از استفاده از document.createTextNode () استفاده نکنم و به جای آن از innerHTML استفاده کنم؟ این به نظر من عجیب و غریب به نظر می رسد زیرا من همیشه فکر innerHTML را به عنوان یکی از حداقل ویژگی های امنیتی جاوا اسکریپت می دانم که نباید با محتوای نامعتبر استفاده شود.

</p>
<pre>برنامه وب - اگر رجیسترهای غیرقابل اعتماد از طرف سرور کنار گذاشته شوند، اگر از طریق document.createTextNode به داخل سند وارد شوند؟<br />

جاوا اسکریپت – کدام شخصیت ها باید فرار کنند یا جایگزین شوند تا حملات تماس تلفنی xss jsonp جلوگیری شود؟

به نظر می رسد که شما از چارچوب ارائه دهنده خدمات پرسیدید، در این صورت پاسخ ساده است:

به عنوان ارائه دهنده خدمات، شما نمی توانید از XSS در برابر همه محافظت کنید، و شما نیز ممکن نیست

به خاطر داشته باشید، من معمولا در "دفاع در عمق" بزرگ و قرار دادن در دیوارهای امنیتی در هر مرحله از راه است. با این حال من فکر می کنم این به معنای واقعی کلمه یکی از مکان هایی است که نگرانی شما در مورد آن نگران کننده نیست. دو دلیل وجود دارد:

1. با استفاده عادی، مشتری اجرای کامل کنترل درخواست را دارد، و بنابراین هیچ دلیلی برای انتظار بارهای بارز مانند این وجود ندارد

در مورد این واقعا نمی توان گفت خیلی بیشتر است، زیرا این چیزی نیست که شما در مورد آن نگران هستید. اما فقط بگو با صدای بلند: مشتری خود را ارائه تماس تلفنی JSONP، و بنابراین اگر آنها را انتخاب کنید از شما درخواست بازگشت جاوا اسکریپت واقعی، پس از آن است که دلیل زیادی برای شما وجود دارد که آنها را متوقف کند (به خصوص از آنجا که انجام این کار خواهد بود احمقانه و متاسفم که هر کسی زحمت میکشد) تنها زمانی که کسی ممکن است درخواست "خطرناک" را از سرور خود درخواست کند، این است که اگر مشتری از راه دور نقص XSS داشته باشد و جاوا اسکریپت مخرب سیستم خود را گرفته است. با این حال، اگر چنین اتفاقی بیفتد:

2. جاوا اسکریپت مخرب دارای کنترل کامل بر روی سرویس گیرنده از راه دور است و نیازی به اجرای جاوا اسکریپت دلخواه را ندارد

که به همان اندازه ساده است: اگر مهاجم یک حمله XSS را علیه یک مشتری با استفاده از سرویس خود مدیریت کرده باشد، لازم نیست جاوا اسکریپت مخرب را به callback تزریق می کند. آنها فقط می توانند روش Callback را در سرویس گیرنده محلی خود جایگزین کنند. در واقع، این بسیار ساده تر است. به عنوان یک نتیجه، به معنای واقعی کلمه هیچ دلیلی وجود ندارد که چرا کسی به دنبال استفاده از خدمات شما به عنوان یک نقطه پایانی تزریق XSS به مشتری از راه دور است. برای قرار دادن آن به سادگی:

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

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

xss – Cross Scripting بر روی یک کلید منحصر به فرد

تصور می کنم که پاسخ به این کاملا پایه است.

آیا می توان یک اسکریپت متقابل سایت را پیوست کرد با وارد کردن اسکریپت من به یک فیلد که نیاز به یک مقدار خاص دارد؟

من اسکن یک نرم افزار برای آسیب پذیری ها و ابزار اسکن من (OWASP ZAP) چندین آسیب پذیری اسکریپت متقابل سایت را باز می کند. نتایج برگشت شامل مسیر برای درخواست REST، روش متصل (GET یا POST) و پارامتر مورد استفاده برای افزودن اسکریپت است.

مسئله این است که برای هر آسیب پذیری، پارامتر مورد استفاده یک شناسه برای یک مقدار منحصر به فرد است. برای مثال، درخواست getUserPrivileges GET آسیب پذیری را با استفاده از پارامتر "userId" نشان می دهد. اگر من سعی کردم این درخواست را در SoapUI انجام دهم، با استفاده از یک UserID معتبر، من پاسخ "بد درخواست" را دریافت کردم. همچنین در رابط کاربر هیچ جایگاهی وجود ندارد که به من اجازه می دهد مقدار مناسبی برای این پارامتر وارد شود.

فرض من این است که مسائلی مانند این همه مثبت کاذب هستند، اما نمی دانم در مورد این موضوع، من می خواستم بررسی کنم فرض من

اگر در این فرض صحیح باشد، آیا دلایلی وجود دارد که چرا چنین مثبت کاذب برآورده شود؟ آیا وجود دارد چیزی که باعث می شود ابزار اسکن من این را برای یک مسئله اشتباه کنم؟

متشکرم از زمان شما.

xss – حفاظت از وب سایت در برابر حملات با iframe برای جاوااسکریپت تولید شده توسط کاربر؟

من یک زمین بازی کوچک برای مردم برای نوشتن و تست جاوا اسکریپت در وب سایت من ایجاد میکنم. من می دانم که وبسایت هایی مانند jsfiddle در حال حاضر وجود دارد، اما فقط برای سرگرمی و برای تلاش برای چیزی جدید است.

اکنون می دانم که مردم می توانند سایت من را خیلی بد با XSS و چیزهای دیگر هک کنند، بنابراین من چند راه برای جلوگیری از ویرانی آوردم :

  1. به طور معمول، مردم جاوا اسکریپت و HTML خود را در یک فرم می نویسند. این متن خالص است هیچ چیز کارکردی نیست.

  2. وقتی میخواهید کد را آزمایش کنید، دادهها از www.A.com به www.B.com ارسال میشوند

  3. در این دامنه، دادهها به یک iframe با ویژگی sandbox در بدون گزینه "allow-top-navigation"

  4. سپس iframe به www.A.com فرستاده می شود

  5. www.A.com دریافت iframe و آن را به عنوان یک کودک به DOM اضافه می کند.

  6. کاربر می بیند iframe و می تواند با آن ارتباط برقرار کند.

آیا این به اندازه کافی امن است؟ یا من از دست رفته چیزی مهم است؟

XSS با رمزگذاری URL – Exchange Security Stack Security Information Security

در این مثال خاص، این پارامتر به XSS آسیب پذیر نخواهد بود.

این بستگی دارد، شما بارهای اطلاعاتی را ارائه نمی دهید، اما به طور کلی، به نظر می رسد چیزی شبیه به: htmlspecialchars (htmlentities ($ input)) فوق العاده امن است.

این بدان معنا نیست که سایت SITE آسیب پذیر نیست، بلکه به این معنی است که این پارامتر به طور خاص امن است.

این هنوز هم بستگی دارد، آیا پارامتر ورودی شما را به یک لینک، iframe، تصویر و غیره تزریق می کند؟ اگر در عنصر دیگری تزریق می شود، ممکن است بدون در نظر گرفتن روش هایی مانند javascript: و داده ها: .