2011-08-15 63 views
0

如何爲textarea添加安全性,以便用戶可以輸入的唯一內容(除了普通文本)是一條新行。只允許在textarea中添加新行

實施例:

<textarea> 
For some reason 
I want this on 2 lines 
</textarea> 

任何其他類型的標記不應該被允許。我用htmlentities,strip_tags,nl2br等php安全函數完成了很多測試,我還沒有找到任何可以做我想做的事情的東西。有任何想法嗎?

更新:我沒有任何關於如何htmlentities不適用於我的例子,因爲這是來自過去的經驗,但如果有人可以提供我如何使用htmlentities來做到這一點的例子,那將是不勝感激!

回答

1

你需要做的就是定義允許值的白名單,其中將包括上下字母字符是什麼,行,然後返回其他任何你想允許(標點符號,數字等)的正則表達式很容易做到這一點,你需要在提交時驗證文本區域的內容。

此外,請確保您總是在服務器端運行此項。你可以運行它的客戶端以及但你必須確保機制不能在瀏覽器中繞過,因此服務器驗證依賴關係。

+0

白名單絕對是服務器端的最佳解決方案,但黑名單 - 如果更簡單 - 當然也可以在客戶端使用。 – Andreas

+0

感謝您的信息!白名單將是完美的,因爲我只想允許
標籤。我將如何去做一個白名單? – cbr0wn

+1

安德烈斯 - 黑名單令人不悅的原因在於,要抓住每個你不願意接受的角色是非常困難的,而且他們非常容易陷入零日,即我們還不知道的攻擊。 cbr0wn - 我建議你爲此發佈另一個問題(或者看看是否已經存在)。你所要求的是一個只允許某些字符的正則表達式。 –

0

這就是你要用「非法」角色做什麼的問題。如果你想簡單地剪切它們,你可能會發現有用的正則表達式。如果你想逃避它們,只需使用htmlspecialchars()htmlentities()

0

你以後只能用php檢查輸入,因爲PHP在服務器上運行,而不是在客戶端運行。如果你想立即檢查,你可以使用javascript,但它會減慢用戶的輸入。

只要信任用戶並過濾它,會是我的建議。

HTH

+1

「只要相信用戶」通常不會在有關安全性的回覆中看到!不需要用JS立即檢查它,只需在表單提交時檢查它並在服務器上檢查它。 –

+0

特洛伊,你也可以信任一個用戶,只要求輸入兩行即可。它不一定是一個安全問題。 ...當然,過濾總是在服務器端。其他一切都是不安全的,可以絕對無用。 – Andreas

+0

我如何過濾除
以外的所有標籤? – cbr0wn