[英]XSS: Why does an alert get fired when this javascript string is assigned?
我正在調查一個XSS問題,可以在以下簡單的html文件中重復該問題,該文件在加載時顯示的警報值為“ 1”。
為什么這樣做? title
字符串中包含一個警報腳本標簽,但令我驚訝的是瀏覽器呈現了它,因為</script>
標簽位於字符串中?
<html>
<head>
<script>
var title = "</script><svg/onload=alert(1)>";
</script>
</head>
<body></body>
</html>
編輯:注意,我已將示例簡化為簡單的字符串分配。
由於title
字符串中的</script>
結束了腳本,因此以下svg
是HTML的一部分。
為了防止這種情況:
不要使用內聯腳本,或者
如果這樣做,則您在其中呈現的任何基於用戶源的輸入都不必包含</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.