如何在服务器端使用JSON Sanitizer?

时间:2015-04-22 08:20:42

标签: json owasp input-sanitization jsonexception

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

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

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

  3. 我只是在JSON中调用一个清理方法就足够了 在JSON数据上清理库?

    是否会执行所有清理工作,还是在这方面还有其他验证?

3 个答案:

答案 0 :(得分:5)

OWASP JSON Sanitizer将类似JSON的输入转换为语法上有效的&嵌入式JSON。

它通常用于在服务器上采用由ad-hoc方法生成的“JSON”,如

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

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

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

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

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

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

  

清理JSON无法保护应用程序免受Confused Deputy attacks

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

答案 1 :(得分:1)

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

/**
 * 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 ]", "");
  }
}

答案 2 :(得分:0)

我想知道一些 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;
}