2012-09-24 33 views
4

也許這是security.stack更好的,我不知道,但這裏的問題:基於unicode的XSS是個問題嗎?

我最近碰到一個博客聲稱<script>alert(1)</script>將得到解析到一個實際的<script>來了。不過,在我最近的Chrome測試中,情況並非如此。有沒有人聽說過瀏覽器將其解析爲真正的標記?如果是這樣,那麼我不知道如何減輕它,因爲大概有其他人,而不僅僅是'<'擔心,我知道我不想通過所有的unicode來枚舉它們。

回答

8

這將直接違反HTML規範。通過它們,標記重要字符是Ascii字符,而像U + FF1C全部寬度標記「<」這樣的字符只是沒有特別意義的數據字符。瀏覽器需要額外的代碼來將全角字符映射到Ascii(作爲臨時映射或者例如通過歸一化到NFKD或NFCKC),但是沒有理由認爲他們會做這樣的事情,而不是有理由認爲他們可以開始繪製「[」到「<」。

因此,一個博客聲稱否則只是描述某人發明的可能性,但沒有真正的理由。您通常可以從參考文獻和演示中看到這一點。 (也就是說,從他們的缺席。)

圍繞Unicode字符肯定有安全問題,看起來相似,但這是人類錯誤地採取一個字符的另一個問題,即使他們是內部相當不同的,例如「<」爲「<」(因此例如在HTML源代碼中將字符串視爲script元素,即使它不是)或「а」代表「a」(具有相同外觀的拉丁字母的西裏爾字母)。也就是說,即使節目將它們看作是不同的,人們也可能會看到相同的字符。

4

不,瀏覽器不會解釋由全角LT或GT標誌包圍的有效HTML標記文本,但一定後端將它們轉化爲正常LT或GT標誌,創建一個XSS風險。參見以下內容:http://websec.github.io/unicode-security-guide/character-transformations/#best-fit

+1

是的,它的確如此。 「Jukka的答案缺少一些重要信息」之後的所有內容都是一個適當的獨立答案。我會刪除這句話以使其更清楚。 –