我正在研究数据安全Web应用程序。我试图将参数从onw jsp页面传递到另一个页面,并且很容易受到XSS攻击。我怎样才能防止jsp中的攻击
我尝试了以下内容:
1)我的网址是:" localhost:8080 / samplejsp.jsp?employeeId = 16 ",如果我尝试传递网址如' 本地主机:8080 / samplejsp.jsp EMPLOYEEID =警报(%27Hello%27)'显示警告(' Hello')。
2)我有一个按钮,当我点击该按钮时,我打开一个新的jsp页面,将employeeId传递给新的JSP "的本地主机:7070 / samplejsp1.jsp EMPLOYEEID = 16 "
3)我试图限制employeeId,但是验证给定输入应该只是数字的正则表达式,否则我不会重定向。
4)现在,当我尝试点击通过" employeeId = alert(%27Hello%27)" 的按钮时,它仍然显示警告消息(&#39 ; Hello')但它没有重定向到新的jsp页面
我的问题是如果发生XSS(跨网站sciprting)攻击,如何停止警报消息?提前致谢
答案 0 :(得分:0)
我的回答基于你这样说:
3)我试图限制employeeId,但是验证给定输入应该只是数字的正则表达式,否则我不会重定向。
由于您专门处理数字,因此可以使用实数解析技术而不是错误的正则表达式。
这是更好的方法。
int number = -1; //initializing with invalid numerical value for your application
try
{
number = Integer.parseInt(userInputString);
}
catch(Exception ex)
{
// could not convert the number
response.sendRedirect("./error.jsp");
return;
}
或者,由于你已经在回复中写了一些内容,因此为时已晚,无法进行重定向:
if(number == -1) // whatever is an invalid numerical value for your application
{
out.print("There was an error with the number");
return;
}
如果数字必须是Double.parseDouble(str)
或浮动Float.parseFloat(str)
的两倍。
对于整数,字符串值如" 1d"将在解析时抛出错误。但对于双倍和浮动,数字后跟一个" d"或" f"喜欢" 1d"和" 1f",将通过(即在数字变量中变为1.0)。因此,请确保在解析数字后使用数字变量而不是用户输入字符串。
答案 1 :(得分:0)
您可以使用owasp-java-encoder https://github.com/OWASP/owasp-java-encoder
您可以使用
Encode.forHtml(用户数据)
用于打印回页面的每个用户输入。