消毒json输入到java服务器

问题描述:

我正在使用json在浏览器和java服务器之间传递数据。消毒json输入到java服务器

我使用Json-lib在java对象和json之间进行转换。

我想去掉susupicious寻找的东西(即“doSomethingNasty()。)来自用户的输入,同时从JSON转换为Java

我可以想像几个点,这是我能做到这一点。

  • 我可以检查的原始JSON字符串并去掉看起来很有趣的东西
  • 我会寻找一种方式来拦截的道路上进入java对象每json的价值,并寻找有趣的东西在那里。
  • 我可以遍历我的新jav从json重建后立即找到一个对象,查找任何字段是字符串,并在那里找到条纹。

什么是最好的方法?有没有为这个任务建立的技术,我已经解决了我的问题?

+1

我最难的部分是确定究竟是什么构成'有趣的东西'。 – 2010-04-02 17:01:27

+0

它几乎听起来好像这不是JSON,但更结构化_JAVASCRIPT_文字(JSON!= Javascript文字),问题?绝对需要定义这里“有趣的东西”的含义。 – StaxMan 2010-04-05 20:04:54

+0

“有趣的东西”基本上意味着JavaScript的功能,而不仅仅是用户数据。我想验证用户是否仅提交适当的个人数据(姓名,地址等),并且没有坏人欺骗用户提交可用于各种恶意的javascript函数。 – morgancodes 2010-04-06 16:10:47

我建议方法3:在到达时立即遍历重构的Java对象,并且在任何其他逻辑可以对其执行操作之前。构建您可以避开的最严格的验证(即,执行白名单)。

您可以在从Json-lib中检索的对象层次结构的单个深度优先遍历中执行此操作。一般来说,你不会想要在你的对象中接受任何JSON函数,并且你需要确保所有的值(数字,字符串,对象树的深度等)都在预期的范围内。是的,做这件事很麻烦,但相信我,好的用户输入验证的替代方案要差得多,更糟糕。无论什么时候删除记录,添加日志记录可能是一个好主意,以便诊断验证代码中的任何可能的错误。

据我所知,你需要验证进入你的应用程序的JSON数据。 如果你想做白名单(“你知道你期望的数据,没有其他东西是有效的”),那么一旦它们被创建,验证你的java对象是有意义的(“确保不要将java对象发送到数据库或在验证完成之前以某种方式回到用户界面) 如果你想黑名单中的字符(你知道一些你想避免的威胁字符“),那么你可以直接查看JSON字符串作为验证在一段时间内不会发生太大的变化,即使这样做,您只需要增强一个共同的地方。同时列出iot将取决于您的业务逻辑。