java - 你通常如何过滤json xss?
问题描述
我写了以下代码。
String body = IOUtils.toString(requestWrapper.getReader());
JSONParser parser = new JSONParser();
Object object = parser.parse(body);
object = clean(object);
body = object.toString();
requestWrapper.resetInputStream(body.getBytes());
private Object clean(Object object) {
if (object instanceof JSONArray) {
JSONArray jsonArray = (JSONArray) object;
for (int i = 0; i < jsonArray.size(); i++) {
jsonArray.set(i, clean(jsonArray.get(i)));
}
return jsonArray;
} else if (object instanceof JSONObject) {
JSONObject jsonObject = (JSONObject) object;
for (Object o : jsonObject.keySet()) {
jsonObject.put(o, clean(((JSONObject) object).get(o)));
}
return jsonObject;
} else if (Objects.nonNull(object)){
return object.toString().replace("<", "<").replace(">", ">");
} else {
return null;
}
}
这似乎工作正常。但我不知道这是否正确。像这样实现代码很可能会导致数据丢失。
解决方案
推荐阅读
- c# - 返回动态对象会引发运行时错误
- intellij-idea - 如何打开 Intellij IDEA api 文档侧面板
- vb.net - 枚举更新的列表
- json - 如何在 laravel 视图中读取响应 api json
- android - 为什么将地图中的语言更改为区域设置语言时,位置名称会从 Google 地图中消失?
- python - 如何使 matplotlib 标题可搜索?
- c# - 使用 ReactiveCollection 级联组合框
- r - R 用 lubridate 在 DST 上添加月份会产生意想不到的结果
- ios - Swift 框架 - 在 Objective-C 类中使用 Swift 类引用
- javascript - 为什么 videojs 不能只在 Chrome 中工作?