G'day大师,
我正在调用企业应用程序的REST API,它们将保持无名,并返回JSON,如下所示:
throw 'allowIllegalResourceCall is false.';
{
"data": ... loads of valid JSON stuff here ...
}
这实际上是有效的JSON吗?如果(我怀疑)它不是,那么这些恶作剧是否有任何引人注目的原因?
我从应用程序供应商处收到的回复是出于安全目的而做的,但我很难理解如何提高安全性,如果有的话。
提前致谢!
彼得
答案 0 :(得分:5)
答案 1 :(得分:3)
它根本不是JSON格式。从你的问题看来,你似乎正在使用像JIVE :)这样的企业系统。我也面临与JIVE api相同的问题。这是他们的V3 API的问题。不标准,但以下的事情对我有用。 (我不确定你是否在谈论JIVE)
//invalid jason response... https://developers.jivesoftware.com/community/thread/2153
jiveResponse = jiveResponse.Replace
("throw 'allowIllegalResourceCall is false.';",String.Empty);
答案 2 :(得分:1)
这是有正当理由的:它可以防止CSRF攻击。如果您将JSON网址包含为<script>
标记的目标,则同源策略不适用。这意味着恶意站点可以包含JSON API的URL,并且任何经过身份验证的用户都将成功请求该数据。
通过适当地覆盖Object.prototype
和/或Array.prototype
,恶意站点可以将任何数据解析为对象文字或数组文字(并且所有有效的JSON也是有效的javascript)。 throw
语句可以通过<script>
标记解析页面中包含的javascript来防止这种情况发生。
答案 3 :(得分:0)
绝对不是有效的JSON。也许在实现中有一个错误,即将某种调试输出与正确的输出混合在一起?
并且,这绝不是出于安全原因。在我看来这是一个普通的错误。
答案 4 :(得分:0)
throw 'allowIllegalResourceCall is false.';
肯定不是有效的JSON。
报告了哪种MIME类型?
答案 5 :(得分:0)
似乎他们已添加该行以防止JSON劫持。只有在返回JSON数组时才需要类似该行来阻止JSON劫持。但他们可能已将该行添加到其所有JSON响应之上,以便于实施。
在使用它之前,你必须删除第一行,然后将剩余的解析为JSON。