在我们的网站上,我们有一个搜索字段,安全研究人员告诉我们,这对XSS漏洞是开放的,因为访问者可能会尝试执行完整的JavaScript。他们向我们发送了一个简单的示例网址,导致JavaScript警告框出现在“搜索”页面上 - 网址参数为搜索?提交= true& action = search& siteId = 2.9945& freeText = 1“;确认(/ XSSPOSED /) ; A =“&安培;排序= publishedDate_descending&安培; slotSearch =真
安全研究人员建议所有数据都应该通过类似于PHP的htmlentities的函数传递,同时引用和引用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 String规则转义字符串中的字符,而不是剥离JavaScript本身。
那么,有没有人知道一个可以100%停止在页面上呈现JavaScript的解决方案?
答案 0 :(得分:0)
如果你正在使用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"