如何从非字符串参数中停止XSS

时间:2014-11-04 05:30:59

标签: jsp xss

我有一个旧的遗留应用程序在工作中我被分配来修复其安全漏洞。我们对其进行了应用程序评估扫描,显示了XSS漏洞。通过使用jsoup白名单清理它,我能够减轻很多表单输入。通过报告,我有一些区域可以将数值注入长类型参数。

以下是调查结果信息:

以下更改已应用于原始请求:将'622";alert(240)'注入参数'name_id'的值

推理:测试结果似乎表明存在漏洞,因为应用程序成功地在响应中嵌入了一个脚本,该脚本将在用户浏览器中加载页面时执行。

Request/Response: GET /applicationName/name.jsp? name_id=622";alert(240)

应用程序用JSP / javascript编写,用于表示层,并通过调用HttpRequestContext类的getParameter获取参数值。

以下是代码如何接收参数值:

long nameID = request.getParameter("name_id", 0L);

如何更改长类型值?是通过URL吗?如果是这样,如何减轻或防止这种情况?

如果将name_id分配给代码中的long类型变量,怎么可以:"name_id=622";alert(240)"注入它?

1 个答案:

答案 0 :(得分:1)

基本上,XSS攻击发生在用户端浏览器内的客户端。

Wikipedia的定义:

  

跨站点脚本(XSS)是一种计算机安全性   通常在Web应用程序中发现的漏洞XSS启用   攻击者将客户端脚本注入其他人查看的网页中   用户。

因此,服务器端用于nameId参数的数据类型不是此处的问题。通过查看您的场景,似乎必须在客户端JavaScript中处理get参数的值,这会导致脚本执行。因此,如果您这样做然后渲染到JSP页面,那么为了防止XSS攻击,可以使用JSTL <c:out>标记或JSTL fn:escapeXml。两种方法中使用的escapeXml函数都会转义XML实体,因此在用户浏览器中不会执行任何脚本。因此,防止了攻击。

请参阅链接中的第一个答案:

XSS prevention in JSP/Servlet web application