当前位置: 首页 > 知识库问答 >
问题:

使用OWASP和ESAPI解决它

孟嘉歆
2023-03-14

攻击向量:java.io.PrintWriter.write

说明:此对 java.io.打印编写器.write() 的调用包含一个跨站点脚本 (XSS) 缺陷。应用程序使用用户提供的输入填充 HTTP 响应,允许攻击者嵌入恶意内容,例如 Javascript 代码,这些内容将在受害者浏览器的上下文中执行。XSS漏洞通常被利用来窃取或操纵cookie,修改内容的呈现方式以及破坏机密信息,并定期发现新的攻击媒介。要 write() 的第一个参数包含受污染的数据。受污染的数据源自之前对 javax.servletrequest.getparameter 的调用。受污染的数据被定向到由组织返回的输出流中。

它位于writer.write(arg1)的代码第一个参数中..请帮我解决这个问题

共有1个答案

罗烨霖
2023-03-14

我认为这指的是这样一个事实,即您可以使用未经净化的用户输入。

例如,在下面简化的servlet中,用户可以通过传入参数来打印自己的名字。

http://xxx/servlet/vulnerable?someuserinput=Bob

但是假设一个攻击者通过电子邮件发送了一个链接,链接中包含一些讨厌的内容。

http://xxx/servlet/vulnerable?someuserinput=alert(“你好!我正在做一些令人讨厌的事情!!“);

经验法则总是清理您的输入

@WebServlet(name = "vulnerable", urlPatterns = {"/vulnerable"})
public class NewServlet extends HttpServlet {

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        String someUserInput = request.getParameter("someuserinput");

        try (PrintWriter out = response.getWriter()) {

            out.write("<!DOCTYPE html>");
            out.write("<html>");
            out.write("<head>");       
            out.write("</head>");
            out.write("<body>");
            out.write("<h1>Hello " + someUserInput + "</h1>");//something bad can happen here 
            out.write("</body>");
            out.write("</html>");
        }
    }

我知道你问的是ESAPI,但OWASP有HTML简单的消毒剂。

https://github.com/OWASP/java-html-sanitizer

HTML环境中的ESAPI(如上)

String safer = ESAPI.encoder().encodeForHTML( request.getParameter( "someuserinput" ) );

Javascript上下文中的ESAPI

String safer = ESAPI.encoder().encodeForJavaScript( request.getParameter( "someuserinput" ) );
 类似资料:
  • OWASP ESAPI for Java: 为Java开发人员提供强力且简单的安全控制。 OWASP ESAPI (OWASP企业级安全API)是一个自由开源的web程序安全控制库,它可以让程序员很容易的写出低风险的程序。The ESAPI for Java library is 旨在让程序员很容易的改进现有程序的安全。 ESAPI for Java 也为新的开发奠定了坚实的基础。 更多信息,请访

  • 我正在尝试通过使用 ESAPI 覆盖()来覆盖 ESAPI OWASP 库中的现有方法。不知何故它不起作用,你知道为什么吗? 这是我的代码:

  • 我正在对我的Java代码执行veracode扫描,它在我的一个DAO类中抛出了以下错误 SQL命令中使用的特殊元素的不正确中和(“SQL注入”)CWE ID 89 然而,我试图使用OWASP来减轻这种情况。ESAPI库,因为我不能使用参数化的输入来构造我的查询,因为我使用的是字符串生成器。以下是我正在尝试的示例代码 有人能帮忙吗?

  • 我们正在将ESAPI2.x(owasp java安全库)添加到一个应用程序中。 有人能展示一个通过使用规范化来防止的攻击样本吗??(爪哇语) 谢谢!

  • 在我当前的项目中,我正在使用Maven和Spring。我目前正在使用SLF4J记录器来记录服务。代替它,我想使用OWASP-ESAPI记录器。我不想使用安全性,只是日志服务。有人能指导我如何使用记录器,用最少的努力替换slf4j记录器吗?我尝试了很多谷歌搜索,但没有任何帮助。我也会非常感谢一些链接来获得有关记录器的知识。

  • 在一个web项目中,我们使用ESAPI验证器来检测XSS攻击。虽然大多数攻击都如预期的那样被检测到,但它无法将下面给定的输入检测为XSS攻击。 浏览器可能会关闭标记本身,从而触发警报功能。 后端是用Java编写的,UI是用JavaScript编写的。使用的反堕胎文件: https://github.com/owasp/ejsf/blob/master/esapi_master_full/antis