如何在服务器端使用 JSON 清理器



我想实现OWASP提到的'JSON Sanitizer'验证。我的理解是,这需要在两个地方完成:

  1. 从客户端或其他系统接收的 JSON 数据(在请求中) - 在处理之前需要在服务器端进行清理

  2. 要发送到客户端的 JSON 数据(在响应中) - 在发送到客户端之前,需要在服务器端对其进行清理

我只在 JSON 中调用清理方法就足够了吗清理该 JSON 数据上的库?

是否会执行所有消毒,或者在这方面是否有任何其他验证要做?

OWASP JSON 清理器将类似 JSON 的输入转换为语法有效且可嵌入的 JSON。

它通常用于获取服务器上由临时方法生成的"JSON",例如

"{ "output": " + stringOfJson + " }"

并确保它在语法上有效,以便可以传递给客户端上的JSON.parse,并且可以嵌入,以便可以嵌入到更大的 HTML 或 XML 响应中,例如

<script>var jsonUsedByScriptsOnPage = {$myJson};</script>

如果您的客户端可能会发送狡猾的 JSON,您绝对可以在您的服务器上使用它。

请注意,您的服务器仍需要将 JSON 视为不受信任,就像它在未使用有效凭据到达的响应中收到的任何其他字符串一样。

https://github.com/OWASP/json-sanitizer#security 解释

清理 JSON 无法保护应用程序免受混淆代理攻击

var myValue = JSON.parse(sanitizedJsonString);
addToAdminstratorsGroup(myValue.propertyFromUntrustedSource);

OWASP JSON 清理器无法处理引号筛选 - 它将字符串拆分为多个字段。所以我写了自己的清理方法,虽然很原始 - 如果你看到任何安全警告,我愿意接受建议,请分享。

/**
 * Helper methods to validate data.
 */
@UtilityClass
public class ValidationUtils {
/**
 * Removes disallowed symbols from string to prevent input injection.
 * @param input User input with possible injection.
 * @return Value without injection-sensible symbols.
 */
public String sanateInjection(String input){
    return input.replaceAll("[^A-Za-z0-9 ]", "");
  }
}

我想知道某些 json 字符串是否包含稍后可用于执行动态内容的<script>标签。但是由于sanitize()方法的返回值会转义它,因此无法检测其中是否存在类似的东西。所以以下内容对我有用:

public static String checkJsonForScripts(String input) {
    if (!JsonSanitizer.sanitize(input).equals(input)) {
        log.error("Problematic string found" + input);
        throw new YourException(...);
    }
    return input;
}

相关内容

  • 没有找到相关文章

最新更新