HTML请求参数的编码

问题描述:

我的应用程序是一个Spring MVC应用程序,不使用注释(尽管它使用spring 3.1.1,它的相当老的应用程序)。HTML请求参数的编码

我有一个JSP页面,可以通过卷曲工具或直接从Web浏览器URL调用。该URL接受名为位置

http://localhost:8080/testdomain/registeruser.do?mylocation=fr 

请求参数上调用上面的网址,我叫SimpleFormController的实现,读取请求参数“mylocation”

如何HTML编码请求参数“mylocation” 。在从我的控制器的request [request.getParameter(“mylocation”)]中读取参数之前,如果我调用HtmlUtils.htmlEscape(request.getParameter(“mylocation”))就足够了

请注意,支持mylocation的输入参数,如前所述,我可以从命令行工具或浏览器URL调用它。

+0

你为什么要编码任何东西?你是否得到了正确的mylocation参数值?如果这只是字母数字值,通常不需要转义/忽略任何内容。 – Damian

+0

可能存在XSS的威胁,可以通过恶意的脚本传递脚本。我被理解为HTML编码将脚本特殊字符转换为其编码形式。 – megan

+0

你用这个参数做什么?如果你在一个js变量里面输出数据,HTML转义是不够的。但是,如果您只有一个不可信的参数,您可以通过更简单的方式进行验证。例如,在生成输出之前检查myLocation的值是否存在于枚举类型中:MyAllowedLocations.valueOf(myLocation); –

有两种不同的事情:

1)URL编码/解码 - 它是只允许传递GET参数到服务器。编码是需要的,因为服务器需要转义一些特殊字符“?” ,查询字符串中的“&”。 它通常由Tomcat等Web服务器处理。

2)为了防止XSS,您可以使用Jsoup。只有在网页上显示参数值时才需要。

一些框架,如JSF可以自动阻止XSS。当它显示在网页上时,它们可以转义HTML。

+0

URL编码是否与HTML编码相同?其次,我不同意只有在参数值将显示在网页上时才需要XSS。可能会出现一些情况,例如使用可能与请求参数绑定并导致XSS攻击的iframe或innerHTML。感谢参考JSoup,我会进一步研究它。 – megan

+0

不,为了防止XSS只需要HTML编码。脚本不会在浏览器地址栏中执行,因此您无需编码/解码URL以防止XSS。 – Damian

+0

为什么我不能通过脚本标记(java脚本标记)作为浏览器url的请求参数或者说一个curl命令?如果这个脚本没有编码,并且能够在代码内部自行执行,该怎么办?它不必在页面上呈现来执行。另请参阅此链接,它有一些有趣的示例,https://developer.salesforce.com/page/Secure_Coding_Cross_Site_Scripting#Sample_vulnerability – megan