我使用 json 在浏览器和 java 服务器之间传递数据。
我正在使用Json-lib在java对象和json之间进行转换。
我想在从 json 转换为 java 时从用户输入中删除看起来可疑的内容(即“doSomethingNasty().”)。
我可以想象我可以在几个点上做到这一点:
- 我可以检查原始 json 字符串并去掉看起来有趣的东西
- 我可以寻找一种方法来拦截进入 java 对象的每个 json 值,并在那里寻找有趣的东西。
- 我可以在从 json 重构后立即遍历我的新 java 对象,查找任何字符串字段,然后剥离其中的内容。
最好的方法是什么?是否有为此任务构建的任何技术,我可以在已有技术的基础上添加这些技术?
最佳答案
我建议采用方法 3:在重构的 Java 对象到达后立即遍历它们,然后再对它们进行任何其他逻辑操作。构建您可以摆脱的最严格的验证(即进行白名单)。
您可以通过对从 Json-lib 检索的对象层次结构进行一次深度优先遍历来完成此操作。一般来说,您不想在对象中接受任何 JSON 函数,并且您需要确保所有值(数字、字符串、对象树的深度等)都在预期范围内。是的,要做好这一点是一个巨大的麻烦,但相信我,良好的用户输入验证的替代方案要糟糕得多。每当您删除内容时添加日志记录可能是一个好主意,以诊断验证代码中任何可能的错误。
关于java - 清理 java 服务器的 json 输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2567890/