我是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中的脚本。
有什么方法可以实现这个目标吗?
答案 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)
param
隐式EL对象要非常小心。这可能是用户提供的。您可以使用JSTL中的escapeXml
来逃避攻击。