2015-09-01 16 views
10

我們的網絡服務已經被一些Zalgo text打了,我想爲未來想出一個好的解決方案。我們的政策是接受所有的用戶輸入並將其保存在永久存儲器中(我們正確地爲後端編碼輸入,所以這部分是可以的)。在輸出階段,我們通過帶有白名單的過濾器/解析器運行原始用戶輸入,以避免XSS攻擊和其他混亂。最近有些用戶發現了Zalgo的世界,他們只是喜歡用這種方式給其他人帶來麻煩。如何避免Zalgo文字在整個地方流血而不完全刪除?

正如我所看到的,Zalgo文本只是一段從預期容器泄漏出來的Unicode文本。因此,我認爲自動刪除所有複雜的組合角色過於激烈的防守。 有沒有人知道一個CSS技巧來強制Zalgo文本被包含在一個給定的父元素中,而沒有一些討厭的副作用?

舉例來說,如果我有

<section class="userinput"> 
... user input here ... 
</section> 

我怎麼能確保用戶輸入不的section.userinput境外泄露?我猜overflow: hiddenclip: rect(...)可能是正確的答案,但是你知道這個用例更好嗎?最好我仍然可以使用section.userinput { max-height: 200vh; }或類似的東西來避免用戶創建人爲的長評論。如果某些評論比200vh長,則它應該只有一個滾動條,僅用於評論。通常,整個頁面應該只有一個滾動條。

請注意,我試圖在視覺域中解決問題。我非常樂意接受任何有效的UTF-8序列作爲用戶輸入,我很好,如果一個混亂的用戶評論導致該用戶評論看起來像廢話。我只是想盡量避免這個地方的垃圾溢出。具體而言,我不是trying to block the zalgo textfilter zalgo-like text before display

回答

4

經過測試an example case與Firefox和Chrome,我會說最好的選擇是使用聲明overflow: auto。只有在可能的滾動條被認爲比丟失用戶內容更糟的情況下使用overflow: hidden纔有意義。

overflow: auto允許在內容不適合的情況下自動回滾到滾動條,並且仍然強制剪切到選定的元素。

聲明clip: rect(0,auto,auto,0);是不好的,因爲它只適用於position: absolute;overflow: visible

請參閱an example without overflow: auto for an comparision