SV.CSRF.ORIGIN
此错误可标识出无法验证请求为同源请求的状态变化请求处理程序。
漏洞与风险
跨站点请求伪造 (CSRF) 是一种发生在以下情况下的攻击类型:恶意网站、电子邮件、博客、即时消息或程序导致用户的 Web 浏览器在用户当前经过身份验证的受信任站点上执行并非所需的操作。
应检查并比较标准 HTTP 头(来源、Referer)以确保请求符合同源策略。如果来源或 Referer 头所标识的源的来源与预期来源不匹配,我们可提供跨源请求。
代码示例
漏洞代码示例 1
复制
void doPost(HttpServletRequest req, HttpServletResponse resp) {
String action = req.getParameter("action");
String id = req.getParameter("id");
if("update".equals(action)){
updateUser(id, req);
}
//...
}
void updateUser(String userid, HttpServletRequest req) {
//...
}
在第 6 行报告了 SV.CSRF.ORIGIN:从未验证“req”为同源请求。攻击者可造成用户浏览器以用户的身份发出源自恶意站点的请求。
修正代码示例 1
复制
void doPost(HttpServletRequest req, HttpServletResponse resp) {
String origin = req.getHeader("Origin");
if(isSameOriginRequest(origin)) {
String action = req.getParameter("action");
String id = req.getParameter("id");
if ("update".equals(action)) {
updateUser(id, req);
}
}
//...
}
void updateUser(String userid, HttpServletRequest req) {
//...
}
此示例可检查标准头以了解请求来源(通过检查来源头),并与某些预期值进行比较。如果这些值匹配,则请求为同源请求。
扩展
此检查器可通过 Klocwork 知识库进行扩展。有关详情,请参阅调整 Java 分析。