以下代码显示了fortify中的跨站点脚本问题。如何使用esapi
阻止相同的操作@POST
@PATH
public EmployeeResponse getFilteredEmployees(EmployeeRequest req, @HeaderParam("user") String user) {
if(user == null)
user = req.getEmpId();
EmployeeResponse resp = new EmployeeResponse();
resp.setEmpName(req.getEmpName);
//Do something with the resp
return resp;
}
答案 0 :(得分:0)
@POST
@PATH
public EmployeeResponse getFilteredEmployees(EmployeeRequest req, @HeaderParam("user") String user) {
if(user == null)
user = req.getEmpId();
EmployeeResponse resp = new EmployeeResponse();
resp.setEmpName(req.getEmpName);
//Do something with the resp
return resp;
}
因此,这被标记的原因是,首先,您没有对您正在接收的变量进行任何输入验证。这是合法的用户吗? )>8*2]U5d)s^deUB|SNJRpT7u=: *8SN:$/wapC"C&dW9 R@*aeZFtPUYqfEk
因为正如所写的那样。因此,<script>alert(1);</script>
是跨站点脚本的教科书案例,而' OR 1=1'
可能导致SQL注入除了其他一些警告。
防御1:Input validation.这是不完整的,但对于XSS缓解是必要的。
防御2:输出正确上下文的编码。
对于您用于输出的任何JSP,请使用ESAPI标记库,并对proper context.进行编码
链接的备忘单将帮助您入门。至于代码示例,一些Web框架附带输入验证API,这些可能就足够了,但是如果使用ESAPI,您可以将{regex}添加到validation.properties
中,然后使用ESAPI.validator().getValidInput( args... );
调用调用该验证规则。