为什么我会收到跨站点脚本:Struts 调用 bean 类的验证不佳

问题描述 投票:0回答:2

我在 HP Fortify 中扫描了我的应用程序并遇到问题

Cross-Site Scripting: Poor Validation
。我正在使用 ESAPI 库。 我在 Struts 应用程序上得到了这个发现。

<%@ taglib prefix="s" uri="/struts-tags" %>
<form method='post' name='<s:property value='tableBean.formName'/>' action='Notification.action'>
public String printApplications() throws IOException, ServletException {
    request.setAttribute(TableDisplayBean.TABLE_BEAN, tableBean);
}

使用 ESAPI 进行编码的正确语法是什么?

    

jsp struts2 xss fortify esapi
2个回答
1
投票

tableBean.formName

适当的语法如下所示:

<html lang="${myVar}">

在您的情况下,请使用 
<%@ taglib uri="/WEB-INF/tld/esapi.tld" prefix="esapi" %> <html lang="<esapi:encodeForHTMLAttribute>${myvar}</esapi:encodeForHTMLAttribute>">

,因为您动态获取的值将被插入到标签上的“name”属性中。 如果要说,在 p 标签中,您会使用

HTMLAttribute

esapi:encodeForHTML

此外,如果该值将由渲染时的 JavaScript 函数接收,
<p> <esapi:encodeForHTML>${myVal}</esapi:encodeForHTML> </p>


编码总是有一个适当的上下文,并且上下文由以下问题回答:“什么样的解释器将首先接收此数据?”

=================================================

我说得不够明确。 我提供的示例仅在听起来像是作为原始 HTML 存储时才会转义 HTML 属性。上面的一般示例已被重新设计。

使用您的示例,尝试:

esapi:encodeForJavaScript

我习惯了 JSTL 语法,所以我不能 100% 确定在此处包装变量的最佳方法。  你必须玩它。  或者,您可以向 
<form method='post' name='<s:property value=<esapi:encodeForHTMLAttribute>'tableBean.formName'<esapi:encodeForHTMLAttribute>/>' action='Notification.action'>

添加一个方法,例如

tableBean
,如下所示:

tableBean.attributeEscapedFormName



0
投票

public class TableBean{ String formName; public String htmlAttributeEscapedFormName(){ return ESAPI.encoder().escapeForHTMLAttribute( formName ); } } 标签

参考以更好地了解如何使用它。

用于获取某个值的属性,默认为顶部 如果未指定则堆栈。参数

允许的动态属性:

property

默认
如果 value 属性为 

false

,则使用的值

    null
  • false false false Boolean 是否转义 CSV(对于转义列的值很有用)
  • escapeCsv
  • false true false Boolean 是否转义 HTML
  • escapeHtml
  • false false false Boolean 是否转义Javascript
  • escapeJavaScript
  • false false false Boolean 是否转义XML
  • escapeXml
  • false false 要显示的对象值
    
    
  • 示例:

value

示例 1 打印 
<s:push value="myBean"> <!-- Example 1: --> <s:property value="myBeanProperty" /> <!-- Example 2: -->TextUtils <s:property value="myBeanProperty" default="a default value" /> </s:push>

myBean
的结果 方法。 示例 2 打印
getMyBeanProperty()
myBean
的结果 方法,如果是
getMyBeanProperty()
,则打印“默认值”。

    

© www.soinside.com 2019 - 2024. All rights reserved.