1

操作系统: Windows 7(64 位)
WAMP 版本: 2.2
Apache 版本: 2.2.22
PHP 版本: 5.4.3
框架: CodeIgniter 2.1.2

嗨,我遇到了一些奇怪的事情,似乎无法确定原因。我正在向服务器发送一个 js 对象以保存在 BLOB 中的 db 中。该对象JSON.stringify()在 Ajax(POST) 调用中发送之前使用转换为 JSON 字符串。

使用后的对象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>\"

我使用 ajax 将此字符串发送到 api 控制器。当我在控制器中收到它时,我print_r()用来打印变量。但是现在插入了上述部分,这就是我收到的:

[{"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。

问候

更新:

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 过滤器可能会从字符串中删除这部分。所以现在的问题是如何解决这个问题?

4

1 回答 1

0

在与@BogdanBurim 讨论之后,我得出结论,为了在某种程度上避免 XSS,CI 从发送到服务器的数据中删除了引号和双引号中包含的任何文本。

有一个选项可以扩展 CI_Input 库以允许选择性地禁用 XSS 过滤器。这将解决我的问题,但会引起安全问题。因此,我所做的是在将数据发送到 api 之前对数据进行编码(base_64)。它作为 BLOB 保存在 DB 中。并且当获取时在客户端解码。

于 2013-05-30T11:01:32.160 回答