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
را به عنوان یکی از حداقل ویژگی های امنیتی جاوا اسکریپت می دانم که نباید با محتوای نامعتبر استفاده شود.