2013-01-17 37 views
1

我想弄清楚什麼最少編碼的數量將是保護一個站點從XSS。允許用戶輸入HTML實體是否危險?

我確信我需要編碼<(&≤)和>(& GT)的標記,「(& QUOT)內部。和'(&#39)中的屬性

我是否還需要編碼&(& amp;)?我在用戶保存數據時遇到了雙重編碼問題(因爲& amp;會變成& amp;)是否存在任何安全漏洞或缺點如果我沒有對&符號進行編碼,我會很開心嗎?這意味着他們可以輸入他們想要的任何HTML實體。

通過HTML實體,我特別指與實體對應的符號 - 前綴序列(如© ™)。

這個問題是語言不可知的(除了HTML部分,當然)。

編輯:heh,堆棧溢出讓我保留我的html編碼實體:)這可能是說。

+0

['htmlentities'](http://us2.php.net/manual/en/function.htmlentities.php) –

+0

如果您不想允許HTML文本在您的文本(http:///php.net/manual/en/function.strip-tags.php) –

+0

重新編輯:SO是一個針對開發者的網站。如果您無法在問題和答案中輸入HTML,則會導致大部分用戶無法使用該網站。請放心,他們正在徹底清除輸入信息 - 雖然這是一個足夠高的配置文件網站,它肯定會吸引大量的黑客攻擊,所以你可以確定他們已經覆蓋了所有的基礎。 – SDC

回答

1

如果您在頁面上顯示這些實體,則只需要對這些實體進行編碼(因爲它是轉義序列標識符,所以&需要轉義>>和<)。

如果您在使用雙重編碼&符號時遇到問題,聽起來好像是在將數據插入存儲機制(數據庫?)之前進行的。停止該操作。當顯示在頁面上時,您應該只跳過頁面的數據。

+0

是的,我試圖找出允許轉義序列的危險。如果我不對我的&符號進行編碼,您能否向我展示可能發生的攻擊?例如,當我將要保存的對象的一部分存儲在數據歸屬中時,就會發生雙重編碼。我把它編碼在顯示器上 - > data-name =「ShyGuy & copy」。如果他們在對象中編輯別的東西,我會發送數據名稱與表格,這將使它被保存在數據庫中作爲「ShyGuy &副本」,下次我輸出時將通過「ShyGuy & & copy 」。 – Paul

+0

一個乾淨的方式:逐字地存儲字符(如果需要,則轉義SQL;因此不會存儲SQL轉義)。然後,實體編碼顯示所有內容。一旦。這是棘手的部分。替代:剝離或禁止, OsamaBinLogin