3

我用 Findbugs 分析了一个代码,它报告了一个警告

servlet 反映了跨站点脚本漏洞。

代码就是这样,第 3 行抛出警告:

String tickName = request.getParameter("ticko");
PrintWriter w = response.getWriter();
w.println("Unable to perform tickonem '" + tickName +"' because no tick with that name is active!"); //this line throws warning.

它的真正原因是什么以及如何解决它?

4

2 回答 2

3

原因是将用户提供的数据附加到响应中而不进行任何转义。这很容易注入将在用户浏览器中执行的 javascript。为避免此类漏洞,您应该在发送回每个用户提供的数据之前对其进行 html 转义。您可以使用一些现有的库为您执行转义,例如StringEscapeUtils

于 2014-04-06T20:52:21.690 回答
0

编写未经处理的用户数据会使应用程序容易受到跨端脚本攻击。您可以使用此编码器库并像这样修改您的代码:

import org.owasp.encoder.Encode;

String tickName = request.getParameter("ticko");
PrintWriter w = response.getWriter();
String responseString = Encode.forJava("Unable to perform tickonem '" + tickName + "' because no tick with that name is active!")
w.println(responseString); //this line now works correctly.
于 2022-01-18T09:26:41.297 回答