[ 
https://issues.apache.org/jira/browse/VELOCITY-884?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Wang yongshan updated VELOCITY-884:
-----------------------------------
    Description: 
Velocity 的默认 *{color:red}$[!]{...}{color}* 语法输出是原始内容输出,没有对造成 *XSS* 漏洞的特殊字符(比如:< 
> 等)进行转义,这样对于 Web 开发来说很容易就引入了 XSS 漏洞;虽然可以通过定义转义 Tools 
来进行二次转义(例如:*$esp.encodeHTML($!{issue.description})*),但是这样非常麻烦。

因此,我有个想法,希望 Velocity 
像前端模板引擎一样,*变量输出默认是转义的*,当你不需要转义时,可以通过特殊的语法(例如:$#{...})进行输出,这样我们在开发 Web 
页面时就不会因为忘记二次转义而引入了 XSS 漏洞(因为 Web 页面开发大多数情况下是需要转义的)。

我对 Velocity-1.7 版本的 *Parser.jjt* 语法树文件进行了修改,增加了 *$#* 语法前缀,该语法前缀用于原始内容输出,而  
*$[!]{...}* 则默认转义输出:

{code:html}
<body>$#{screen_content}</body>

#foreach()
<li> $!{user.name} </li>
#end
{code}

希望能在 Velocity-2.x 版本中得到默认的实现支持。

祝愿  Velocity 越来越好!


  was:
Velocity 的默认*{color:red} $[!]{...}{color}* 语法输出是原始内容输出,没有对造成 *XSS* 漏洞的特殊字符(比如:< 
> 等)进行转义,这样对于 Web 开发来说很容易就引入了 XSS 漏洞;虽然可以通过定义转义 Tools 
来进行二次转义(例如:*$esp.encodeHTML($!{issue.description})*),但是这样非常麻烦。

因此,我有个想法,希望 Velocity 
像前端模板引擎一样,*变量输出默认是转义的*,当你不需要转义时,可以通过特殊的语法(例如:$#{...})进行输出,这样我们在开发 Web 
页面时就不会因为忘记二次转义而引入了 XSS 漏洞(因为 Web 页面开发大多数情况下是需要转义的)。

我对 Velocity-1.7 版本的 *Parser.jjt* 语法树文件进行了修改,增加了 *$#* 语法前缀,该语法前缀用于原始内容输出,而 
*$[!]{...}* 则默认转义输出:

{code:html}
<body>$#{screen_content}</body>
#foreach()
<li> $!{user.name} </li>
#end
{code}

希望能在 Velocity-2.x 版本中得到默认的实现支持。

祝愿  Velocity 越来越好!



> 希望Velocity能够增加一个新语法(比如:$#{...}),为了方便解决XSS漏洞问题。
> ----------------------------------------------
>
>                 Key: VELOCITY-884
>                 URL: https://issues.apache.org/jira/browse/VELOCITY-884
>             Project: Velocity
>          Issue Type: New Feature
>          Components: Engine
>    Affects Versions: 2.0
>            Reporter: Wang yongshan
>            Priority: Minor
>              Labels: features
>             Fix For: 2.1.x
>
>
> Velocity 的默认 *{color:red}$[!]{...}{color}* 语法输出是原始内容输出,没有对造成 *XSS* 
> 漏洞的特殊字符(比如:< > 等)进行转义,这样对于 Web 开发来说很容易就引入了 XSS 漏洞;虽然可以通过定义转义 Tools 
> 来进行二次转义(例如:*$esp.encodeHTML($!{issue.description})*),但是这样非常麻烦。
> 因此,我有个想法,希望 Velocity 
> 像前端模板引擎一样,*变量输出默认是转义的*,当你不需要转义时,可以通过特殊的语法(例如:$#{...})进行输出,这样我们在开发 Web 
> 页面时就不会因为忘记二次转义而引入了 XSS 漏洞(因为 Web 页面开发大多数情况下是需要转义的)。
> 我对 Velocity-1.7 版本的 *Parser.jjt* 语法树文件进行了修改,增加了 *$#* 语法前缀,该语法前缀用于原始内容输出,而  
> *$[!]{...}* 则默认转义输出:
> {code:html}
> <body>$#{screen_content}</body>
> #foreach()
> <li> $!{user.name} </li>
> #end
> {code}
> 希望能在 Velocity-2.x 版本中得到默认的实现支持。
> 祝愿  Velocity 越来越好!



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to