javascript - 如何在Java应用中阻止XSS攻击,阻止用户在网页上执行JavaScript?

标签 javascript java tomcat xss

<分区>

在我们的网站上,我们有一个搜索字段,一名安全研究人员告诉我们,这对 XSS 攻击是开放的,因为访问者可能会尝试执行完整的 JavaScript。他们向我们发送了一个简单的示例 URL,它会导致 JavaScript 警告框出现在搜索页面上 - URL 参数是 search?submitted=true&action=search&siteId=2.9945&freeText=1";confirm(/XSSPOSED/);a="&sort= publishedDate_descending&slotSearch=true

安全研究人员建议,所有数据都应通过类似于 PHP 的 htmlentities 的函数传递,同时设置 ent 引号和 UTF8 标志,以防止使用混淆进行利用。所以我搜索了看是否有与 htmlentities 等效的 Java,并且我从 Apache Commons Lang 的 StringEscapeUtils 类中找到了 escapeHtml() 和 escapeJavaScript() 方法:https://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/StringEscapeUtils.html . escapeHtml() 方法转义 HTML 字符,例如 < 和 >,但我不太确定 JavaScript。 escapeJavaScript 方法实际上似乎使用 JavaScript 字符串规则转义字符串中的字符,而不是剥离 JavaScript 本身。

那么,有谁知道可以 100% 停止在页面上呈现 JavaScript 的解决方案吗?

最佳答案

如果您正在使用 java 并想在后端验证它,您可以使用此代码,在此示例中,它检查用户是否未发送和可疑值而不是他的名字。

if (CommonUtility.checkValidate(firstName) || CommonUtility.checkValidate(lastName) ||
 CommonUtility.checkValidate(newUserName)) {
        response
        .sendRedirect(PHConstants.CONTEXT_PATH
            + "/login/registrationError.jsp");
        return;
        }


    public static boolean checkValidate(String name) {
        if (null != name) {
        String patternString = ".*javascript:.*|.*//.*|.*<.*|.*>.*";
        Pattern pattern = Pattern.compile(patternString);
        Matcher matcher = pattern.matcher(name);
        return matcher.matches();
        }
        return false;
    }

我们可以通过添加识别规则来在服务器端识别被篡改的 URL。这是通过在 RuleConf 文件夹中添加 conf 文件来完成的

供您引用的代码示例:

SecRule REQUEST_LINE "@contains myapp/access/PageServlet?url=/notices/dummyNotifPage.jsp" "chain,phase:2,t:none,status:403,msg:'Generic javascript Injection prevention',severity:2"
SecRule ARGS|QUERY_STRING "(<[^>]*>)" "status:403"
 
SecRule REQUEST_LINE "@contains myapp/access/PageServlet?url=/notices/dummyNotifPage.jsp" "chain,phase:2,t:none,status:403,msg:'Generic javascript Injection prevention',severity:2"
SecRule ARGS|QUERY_STRING "(?i)javascript:" "status:403"
 
SecRule REQUEST_LINE "@contains myapp/access/PageServlet?url=" "chain,phase:2,t:none,status:403,msg:'Check for double slashes in url parameter',severity:2"
SecRule ARGS|QUERY_STRING "/{2}" "status:403" 

关于javascript - 如何在Java应用中阻止XSS攻击,阻止用户在网页上执行JavaScript?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36328389/

相关文章:

javascript - 当我有一个唯一的 key 时,为什么我会收到一个唯一的 key Prop 警告?

Java PhantomReference

java - normalize-space() 的目的是什么?

Java:每次按下仅识别一次按键

apache - 如何为solr指定JAVA_OPTS?

javascript - 如何查找引用数组的三个变量的重复项?

javascript - cordova inappbrowser 引用元素

java - 不同 Tomcat 服务器上托管的 REST 服务之间的通信

java - 更新 tomcat 库中的 jar

javascript - 在 haml.js 中使用连字符属性的正确方法