如何忽略url中的“脚本”?

时间:2014-03-10 14:41:34

标签: security jsp servlets

我是JSP新手。

我有以下网址来拨打我的申请:

http://machine.domain.com:8383/eqube70/BuildNPlay

这很好用,它按照我的期望来调用index.jsp。

但如果我的请求网址更改为:

http://machine.domain.com:8383/eqube70/BuildNPlay/?--%3E%3C/script%3E%3Cscript%3Ealert('you got hacked')%3C/script%3E

然后我收到警报,我无法让我的应用程序正常工作。 这可能是请求url中的脚本被执行。

现在我想要一些方法在URL传递给JSP之前忽略URL中的脚本。

有什么方法可以实现这个目标吗?

2 个答案:

答案 0 :(得分:0)

为了快速,你可以通过一个替换所有<和>用其他东西。

private String replaceGTLT(String str)
{
   if(str==null) return null;
   return str.replaceAll("<", "[").replaceAll(">", "]");
}

String parameterX = replaceGTLT(request.getParameter("parameterX"));

当然,[script]alert('you got hacked')[/script]仍会在输入中,但由于将方括号更改为方括号,它不会在浏览器中运行。

答案 1 :(得分:0)

  1. 不要使用scriptlet,JSTL会为你逃避。
  2. param隐式EL对象要非常小心。这可能是用户提供的。您可以使用JSTL中的escapeXml来逃避攻击。
  3. 您可以编写一个ServletFilter (info here),以便在他们触摸您的网络应用之前过滤掉您不想要的内容。
  4. 最后,您需要一个具有可靠XSS预防功能的框架。查看this list