如果字符串作为 text/json 传递,什么将传递给 Java servlet 的响应?

what will be passed to the response of Java servlets in case a string is passed as text/json?

我的问题与安全相关。 请考虑 java 中的以下代码:

public static void DoGet(HttpServletRequest request , HttpServletResponse response) throws IOException
    {
        String input = request.getParameter("input");
        response.setContentType("application/json"); //FP
        response.getWriter().println(input);

    }

如果输入等于一个简单的字符串,上面的代码将传递给客户端什么? 例如,我尝试在上面的代码中传递一个 javascript 脚本,将 application/json 设置为从 XSS 清理的响应类型? 谢谢, 玛丽

设置内容类型在服务器端没有任何作用...除了告诉客户端以特定方式解释内容。它当然不会进行任何服务器端清理。如果需要清理,需要在 / 之前完成,因为 JSON 是在服务器端生成的。

话虽如此,有了正确实施的浏览器和正确实施的网页,客户端的 "evaluating" 和 JSON 应该没有什么。如果在您的示例中 input 参数中有棘手的东西,客户端 JSON 解析器应该使用它进行编码......并将其视为无效 JSON。但是,如果出现以下情况,则存在潜在风险:

  • 在 JSON 中传递的值用于构建动态网页内容;即嵌入 HTML 或
  • 它们用于形成返回到您的服务器或另一台服务器的 HTTP 请求。

因此建议进行服务器端清理。