Struts 1.x漏洞问题如下所述:
Apache Struts容易出现安全绕过漏洞,因为它无法充分处理用户提供的输入。攻击者可以利用此问题绕过某些安全限制并执行未经授权的操作。
为了处理多部分请求,我们使用了以下代码:
DiskFileItemFactory factory = new DiskFileItemFactory();
// Configure a repository (to ensure a secure temp location is
// used)
ServletContext servletContext = filterConfig.getServletContext();
File repository = (File) servletContext.getAttribute( "javax.servlet.context.tempdir" );
factory.setRepository( repository );// Create a new file upload
// handler
ServletFileUpload upload = new ServletFileUpload( factory );
// Parse the request
List<FileItem> multipartItems = upload.parseRequest( request );
// Prepare the request parameter map.
Map<String, String[]> parameterMap = new HashMap<String, String[]>();
// Loop through multipart request items.
for ( FileItem multipartItem : multipartItems )
{
if ( multipartItem.isFormField() )
{
// Process regular form field (input type="text|radio|checkbox|etc", select, etc).
processFormField( multipartItem, parameterMap );
}
else
{
// Process form file field (input type="file").
processFileField( multipartItem, request );
}
}
我们正在将文件字段处理为:
private void processFileField( FileItem fileField, HttpServletRequest request )
{
if ( fileField.getName().length() <= 0 )
{
// No file uploaded.
request.setAttribute( fileField.getFieldName(), null );
}
else
{
// File uploaded with good size.
request.setAttribute( fileField.getFieldName(), fileField );
}
}
但是在Action类中,当我们尝试检索表单字段时,我们得到NULL。我们如何获取表单中的文件字段。
尝试的选项是: 1)将multipartItem.setFormField()设置为true 2)设置表单字段和非文件参数。
以上都没有帮助。需要创意。
答案 0 :(得分:0)
您忘记检查请求是否是多部分表单请求。例如
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
对于代码段,您应该查看此答案File upload with ServletFileUpload's parseRequest。