java - 清理/验证变量以避免跨站点脚本攻击
问题描述
我在 CheckMarx 安全扫描中遇到了这个问题:
第 69 行的 方法
exec
获取元素的用户输入。然后,该元素的值在未经过适当清理或验证的情况下流经代码,并最终在第 905 行的方法中显示给 用户。这可能会启用跨站点脚本攻击。web\src\main\java\abc\web\actions\HomeAction.java
CNF_KEY_COSN
logException
web\src\main\java\gov\abc\external\info\ServiceHelper.java
第 69行HomeAction.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 行。任何帮助深表感谢。
谢谢
解决方案
您可以使用Jsoup为 XSS 攻击清理字符串,这是一种clean()
方法。你会做这样的事情来清理输入:
String sanitizedInput = Jsoup.clean(originalInput, "", Whitelist.none(), new OutputSettings().prettyPrint(false));
推荐阅读
- javascript - Javascript:如何从带有分隔符的输入中计算总月数?
- html - 允许用户使用单选按钮 django 以升序排序
- javascript - 哪个是使用 ffmpeg 下载视频的最快方法
- javascript - 删除 Parsely.js 验证的无效值,而用户不必在维护验证消息的同时自行删除它们?
- java - 在 openshift 上使用 gradle build 自动化 Spring Boot 应用程序的构建和部署过程
- openshift - Grafana loki 和 promtail:非常冗长的日志和行序问题
- python - 如何提高此蛮力代码查找具有相同哈希的文件的性能?
- bit-manipulation - 我遇到了一个问题,我必须将八位字节序列转换为具有 2 个字节偏移的十六进制数字
- android - windowSoftInputMode adjustPan:如何为 DatePicker 的文本字段添加更多边距(微调器模式)
- python - 在python中删除文本文件的特定模式