問題是,您無法真正地告訴用戶字段中允許有多少個字符,因爲轉義值顯然比未轉義的字符多。經過十六進制消毒處理後,HTML數據超出字段長度
我看到了幾個解決方案,但沒有看起來非常好:
每個字段- 一個白名單(太多的工作,並不完全解決問題)
- 一個黑名單的每個字段(同上)
- 使用,可以保存數據,即使所有字符轉義(壞)字段長度
- 的Un蓋大小的數據庫字段(壞)
- 保存數據的十六進制轉義和完全傳遞責任,輸出濾波(不太好)
- 讓用戶猜測的最大尺寸(最差)
還有其他的選擇嗎?這種情況有沒有「最佳做法」?
示例代碼:
$string = 'javascript:alert("hello!");';
echo strlen($string);
// outputs 27
$escaped_string = filter_var('javascript:alert("hello!");', FILTER_SANITIZE_ENCODED);
echo strlen($escaped_string);
// outputs 41
如果數據庫字段的長度,也就是說,40,逃跑的數據不適合。
在什麼編程環境下? Win32,HTML,...? – 2008-10-04 15:11:36
對不起,這是HTML。爲了澄清,添加了一些標籤。 – 2008-10-04 15:15:11