【问题标题】:Sanitize json input to a java server清理 json 输入到 java 服务器
【发布时间】:2010-04-02 16:46:29
【问题描述】:

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

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

在从 json 转换为 java 时,我想从用户输入中去除可疑的东西(即“doSomethingNasty().)。

我可以想象有几点我可以做到这一点:

  • 我可以检查原始 json 字符串并去掉看起来很有趣的东西
  • 我可以寻找一种方法来拦截进入 java 对象的每个 json 值,并在那里寻找有趣的东西。
  • 我可以在从 json 重构后立即遍历我的新 java 对象,查找任何字符串字段,然后剥离那里的内容。

最好的方法是什么?是否有针对这项任务构建的任何技术,我可以将其应用到我已经拥有的东西上?

【问题讨论】:

  • 对我来说最难的部分是确定什么是“有趣的东西”。
  • 这听起来好像不是 JSON,而是更结构化的 JAVASCRIPT 文字(JSON != Javascript 文字),问题?绝对需要在这里定义“有趣的东西”是什么意思。
  • “有趣的东西”基本上是指javascript函数,而不仅仅是用户数据。我想验证用户是否只提交了适当的个人数据(姓名、地址等),并且没有坏人会欺骗用户提交 javascript 函数,然后这些函数可能被用于各种邪恶。

标签: java security json


【解决方案1】:

我建议方法 3:在到达后立即遍历重构的 Java 对象,并且在任何其他逻辑可以对它们起作用之前。构建您可以逃脱的最严格的验证(即,将其列入白名单)。

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

【讨论】:

    【解决方案2】:

    据我了解,您需要验证进入应用程序的 JSON 数据。 如果您想做白名单(“您知道您期望的数据,没有其他有效的数据”),那么在创建 java 对象后验证它们是有意义的(“确保不要将 java 对象发送到 DB 或返回在验证完成之前以某种方式到 UI)。 如果您想将字符列入黑名单(您知道一些要避免的威胁字符),那么您可以直接查看 json 字符串,因为此验证在一段时间内不会发生太大变化,即使它确实,您只需要增强一个常见的地方。因为列出物联网将取决于您的业务逻辑。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-27
      • 2019-07-15
      • 1970-01-01
      相关资源
      最近更新 更多