在Java中转义html

Kyl*_*yle 13 java xss jsp escaping

我如何确保两次逃脱?

我听说它是​​一种很好的做法,可以在从表单中接收值时转义值,并在输出时转义.这样你就有两次抓住机会的机会.

Bal*_*usC 18

我假设您正在使用JSP.

只在展示期间逃脱.那里的JSTL <c:out>标签是完全合适的.默认情况下,它会转义HTML实体.使用它来显示每个用户控制的输入,例如请求URL,请求标头和请求参数.

例如

<input type="text" name="foo" value="<c:out value="${param.foo}" />">
Run Code Online (Sandbox Code Playgroud)

不需要在输入期间转义.XSS不会损害原始Java代码或SQL数据库.另一方面,您还希望在数据库中保存未修改的数据,以便您仍然可以看到用户实际输入的内容,以便您可以在必要时对邮件用户执行社交操作.

如果您想知道在输入期间要逃避什么,那将是SQL注入.在这种情况下PreparedStatement,Statement只要您想在数据库中保存任何用户控制的输入,只需使用而不是常规.

例如

create = connection.prepareStatement("INSERT INTO user (username, password) VALUES (?, MD5(?))");
create.setString(1, username);
create.setString(2, password);
create.executeUpdate();
Run Code Online (Sandbox Code Playgroud)

  • 这确实是一个适当的时机问题.只有在**实际需要**时才会逃避(即在从一个环境传递到其他可能变成恶意的环境中).不幸的是,在糟糕的项目中,你所说的就是可以理解的.最好的办法是查看整个代码并删除任何不必要/错误的定时转义.祝好运. (2认同)