背景
问题
我测试了我的应用程序,每个用户输入都容易受到HTML /脚本注入攻击。我在客户端使用某种方法来阻止它们,但如果我们在将表单值发布到服务器之前操作了表单值,则注册成功完成并损坏了我的网站。因此,我的首要任务是在服务器端使用相同的检测方法。我应该做这个预告片,但无论如何还有一些原因......
我在想什么
是检查拦截器中的每个参数。拦截器将验证页面提供用户输入和表单的所有参数。
有点像这样
public class ParameterFilteringInterceptor {
// 1. get all request parameters..
// 2. check every values..
// 3. if illegal characters exist in one of them,
// converting or escaping them will start and change them to acceptable values.
// Getting and setting on request parameters is going to occur frequently.
// If good to go, return true
// Or return false with a proper error message.
}
像这样设置
<interceptor>
<mapping path="/addform" />
<mapping path="/editform" />
<mapping path="/post" />
<mapping path="/newarticle" />
<mapping path="/newcomment" />
.
.
.
<!-- Depend on the volume of a web application,
these mapping paths could be sooooooooo many. -->
<beans:bean class="com.company.web.interceptor.AuthenticatingInterceptor"></beans:bean>
</interceptor>
所以......我想问的是...... &#34;上面有什么好看的想法?&#34;
答案 0 :(得分:3)
试图逃避或以其他方式拒绝提交cross-site scripting (XSS)次尝试并不是一个好主意。这种方法存在一些问题:
相反,您应该在显示内容时适当地转义 。这里有一个pretty good writeup,详细说明了为什么逃避输入是一个坏主意。
Spring支持的模板框架具有转义内容的快捷方式。
就我个人而言,我建议使用Thymeleaf:默认情况下,它会为HTML内容和属性转义用户输入 - 否则需要使用specific Thymeleaf attribute - 并且它有shortcuts for escaping input用于JavaScript或JSON嵌入式在页面上(见下)。
如果您正在使用其他模板框架(或JSP),请查阅其文档以了解如何在显示中转义内容。请注意,某些模板框架默认情况下不会转义和/或不提供不同的转义方法。当你忘记在某处忘记输入时,前者会导致XSS漏洞,后者的后果已经在上面描述过了。