在Java中使用ESAPI编码器

时间:2017-05-31 07:41:30

标签: java rest xss esapi

以下代码显示了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;
}

1 个答案:

答案 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... );调用调用该验证规则。