簡體   English   中英

XSS:分配此javascript字符串后,為什么會觸發警報?

[英]XSS: Why does an alert get fired when this javascript string is assigned?

我正在調查一個XSS問題,可以在以下簡單的html文件中重復該問題,該文件在加載時顯示的警報值為“ 1”。

為什么這樣做? title字符串中包含一個警報腳本標簽,但令我驚訝的是瀏覽器呈現了它,因為</script>標簽位於字符串中?

test.html

<html>
    <head>
      <script>
        var title = "</script><svg/onload=alert(1)>";
      </script>
    </head>
  <body></body>
</html>

編輯:注意,我已將示例簡化為簡單的字符串分配。

由於title字符串中的</script>結束了腳本,因此以下svg是HTML的一部分。

為了防止這種情況:

  1. 不要使用內聯腳本,或者

  2. 如果這樣做,則您在其中呈現的任何基於用戶源的輸入都不必包含</script> (我可能會偏執,並允許</script以及>之間的空格;在JavaScript正則表達式中,帶有m標志的<\\s*/\\s*script\\s*> 。)

對於#2,編碼實體將起作用,或者僅在內容中的斜杠前面插入反斜杠。 如果這樣做(服務器端),那么您將擁有:

<html>
    <head>
      <script>
        var test = {
          "id" : 12181,
          "title" : "<\\/script><svg/onload=alert(1)>",
          "email" : null
        };
      </script>

    </head>
  <body>
  </body>
</html>

...不會發出警報。 (我只添加了一個反斜杠,但是,當然,它在字符串文字中,因此可以轉義。)

但是 ,如果您要在頁面中放置不受信任的內容,請閱讀owasp.org XSS(跨站點腳本)預防速查表 ,這將為您提供良好的服務。 上面的內容對於這一特定用途可能就足夠了,但是您可能想走得更遠,並且您當然希望對包含在HTML(而不是腳本)元素,屬性(甚至是HTML文本,甚至是HTML元素)中的任何內容進行HTML轉義。如果它們是onclick等),等等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM