首页 > 解决方案 > 清理/验证变量以避免跨站点脚本攻击

问题描述

我在 CheckMarx 安全扫描中遇到了这个问题:

第 69 行的 方法exec获取元素的用户输入。然后,该元素的值在未经过适当清理或验证的情况下流经代码,并最终在第 905 行的方法中显示给 用户。这可能会启用跨站点脚本攻击。web\src\main\java\abc\web\actions\HomeAction.javaCNF_KEY_COSNlogExceptionweb\src\main\java\gov\abc\external\info\ServiceHelper.java

第 69HomeAction.java

String cosn = (String) request.getParameter(CNF_KEY_CON);

第 905 行ServiceHelper.java记录错误:

private static void logException(InfoServiceException exception, String message) {
    String newMessage = message + ": " + exception.getMessageForLogging();
    try {
        log.error(newMessage, exception);
    } catch (Exception e) {
        // fallback to console
        System.out.println("error logging exception ->");
        e.printStackTrace(System.out);
        System.out.println("exception ->");
        System.out.print(newMessage);
        if (exception != null) exception.printStackTrace(System.out);
    }
}

将另一个代码块更改HomeAction.java为:

if(cosn!= null && cosn.matches("[0-9a-zA-Z_]+")) {
  ...
}

但这没有帮助。如何验证/清理/编码第 69 行。任何帮助深表感谢。

谢谢

标签: javavalidationsecurityinputcheckmarx

解决方案


您可以使用Jsoup为 XSS 攻击清理字符串,这是一种clean()方法。你会做这样的事情来清理输入:

String sanitizedInput = Jsoup.clean(originalInput, "", Whitelist.none(), new OutputSettings().prettyPrint(false));

推荐阅读