2013-05-28 18 views
1

OS發送到服務器丟失:的Windows 7(64位)
WAMP版本: 2.2
Apache的版本: 2.2.22
PHP 版本: 5.4.3
框架:笨2.1.2有些神祕的標記時,去用ajax(POST)作爲字符串

嗨,我遇到一些STR憤怒,似乎無法查明原因。我正在向服務器發送一個js對象,將其保存在BLOB中的db中。使用JSON.stringify()將對象轉換爲JSON字符串,然後使用Ajax(POST)調用發送它。

對象使用JSON.stringify

[{"page_id":"1","site_id":456,"composite_id":"456-1-text-1","type":"2","properties":"{\"id\":\"text-1\",\"isModified\":false,\"isNew\":false,\"name\":\"Text 1\",\"content\":\"<span style=\\\"text-decoration:underline;font-size:x-large;color:#7092be;background-color:#c8bfe7;\\\"><strong>Your text here</strong></span>\",\"keywords\":\"\",\"top\":103,\"left\":119,\"width\":130,\"height\":30,\"style\":{\"borderColor\":\"#1e07da\",\"borderSize\":\"2\",\"borderRadius\":\"6\",\"shadowType\":\"drop-shadow\",\"shadowColor\":\"#000000\",\"shadowSize\":\"0\",\"shadowBlur\":\"0\",\"boxShadowColor\":\"#000000\",\"boxShadowPosX\":\"3\",\"boxShadowPosY\":\"2\",\"boxShadowBlur\":\"5\",\"boxShadowType\":\"\",\"zIndex\":2020}}"}] 

後這是關於部分從上面的字符串是被修改(鍵 - 值對):

\"content\":\"<span style=\\\"text-decoration:underline;font-size:x-large;color:#7092be;background-color:#c8bfe7;\\\"><strong>Your text here</strong></span>\" 

我用發送此字符串到API控制器阿賈克斯。當我在控制器中收到它時,我使用print_r()來打印變量。但現在insted的上述部分的,這是我收到:

[{"page_id":"1","site_id":456,"composite_id":"456-1-text-1","type":"2","properties":"{\"id\":\"text-1\",\"isModified\":false,\"isNew\":false,\"name\":\"Text 1\",\"content\":\"<span ><strong><em>Your text here</em></strong></span>\",\"keywords\":\"\",\"top\":103,\"left\":119,\"width\":130,\"height\":30,\"style\":{\"borderColor\":\"#1e07da\",\"borderSize\":\"2\",\"borderRadius\":\"6\",\"shadowType\":\"drop-shadow\",\"shadowColor\":\"#000000\",\"shadowSize\":\"0\",\"shadowBlur\":\"0\",\"boxShadowColor\":\"#000000\",\"boxShadowPosX\":\"3\",\"boxShadowPosY\":\"2\",\"boxShadowBlur\":\"5\",\"boxShadowType\":\"\",\"zIndex\":2020}}"}] 

正如你所看到的有關部分缺失的樣式設置,現修改爲:

\"content\":\"<span ><strong><em>Your text here</em></strong></span>\" 

我一直在尋找它通過互聯網,但它似乎並不是一個普遍的問題,因爲我無法找到與之相關的任何事情。所以現在我依靠SO。

問候

UPDATE:

我用var_dump($_REQUEST)通過@BogdanBurim的建議。這是有關的部分:

\&quot;content\&quot;:\&quot;&lt;span style=\\\&quot;text-decoration:underline;font-size:x-large;color:#7092be;background-color:#c8bfe7;\\\&quot;&gt;&lt;strong&gt;Your text here&lt;/strong&gt;&lt;/span&gt;\&quot; 

正如你所看到的樣式設置仍然存在。所以我們來決定CI濾波器可能會從字符串中刪除這部分。所以現在的問題是如何解決這個問題?

+0

是缺少通過某些文件管理器的樣式設置的那部分?嘗試index.php中的var_dump($ _ REQUEST),看看輸入是否正確。如果可以,這是CI過濾器問題。其他方式一些服務器設置。 –

+0

@BogdanBurim謝謝。所以它似乎是一個CI濾波器的問題。我使用了'var_dump',並且樣式設置在那裏(更新了描述)。那麼現在的問題就是如何避免這個問題呢? –

+0

問題是我們不知道您啓用了哪些過濾器。 –

回答

0

經過與@BogdanBurim的討論後,我得出結論,爲避免XSS在某種程度上避免從發送到服務器的數據中刪除引號和雙引號內的任何文本。

可以選擇擴展CI_Input庫以允許選擇性地禁用XSS過濾器。這將解決我的問題,但會引發安全問題。因此,我所做的是在將數據發送到api之前對數據進行編碼(base_64)。它以BLOB形式保存在數據庫中。並在客戶端解碼時提取。