2011-03-21 71 views
0

我在應用程序中使用codeigniter。有一種形式。在textarea元素,我寫的東西,包括CodeIgniter 2.0輸入庫字符問題

%Features% 

然而,當我想通過這 - $>輸入 - >(標號)來呼應這一點,我得到的東西像 �atures%

的「% Fe'消失了。

在主要的CI的index.php文件中,我試過var_dump($_POST),我看到上面的單詞完全沒問題。但是當我用輸入庫獲取它時(xss過濾已開啓),我得到了問題。

當XSS過濾關閉時,它最初看起來沒問題。但是,如果我將其存儲在數據庫中並在下次顯示時出現同樣的問題(即使xss過濾關閉)。

回答

1

%Fe恰好看起來像一個URL編碼的序列%FE,代表字符254。它被用於Unicode「我不知道那個序列意味着什麼」字形, 。

很明顯,在解碼提交字段時,「XSS過濾器」過於熱心了。

當您從數據庫輸出結果時,很有可能在過程的某個點再次運行URL解碼。檢查數據庫以確保實際的字符串正確表示。

+0

嗨,我剛剛發現是什麼問題。這是form_validation庫的問題。 xss_clean規則適用於該字段。當我刪除它工作正常。這意味着如果全局啓用了xss_clean(在config.php中),或者如果在表單驗證中運行了xss_clean過濾器,則會導致該問題。到目前爲止,唯一的解決方案是禁用它:(還有其他想法嗎? – HungryCoder 2011-03-22 01:34:17

1

第一:在將變量存儲到數據庫之前將其轉義。 %在SQL中有特殊含義。

第二:%在URL中也有特殊的含義,例如。 %20是%FE將映射到一些字符將被解碼的輸入()

+0

CI本身在數據存儲到數據庫之前就轉義了這個值。 – HungryCoder 2011-03-22 01:26:31

+1

@HungryCoder,不對,取決於程序員如何更新/插入它們。 – Jakub 2011-03-23 18:41:13

+0

@jakub,謝謝爲您的輸入。我告訴我的情況,因爲我使用ActiveRecord! – HungryCoder 2011-03-24 04:06:37