如何确保我不会两次逃脱?
我听说,从表单接收值时转义值,并在输出时也转义是一种很好的做法。这样,您就有两次机会抓到东西。
我认为您正在使用JSP。
仅在 显示 期间逃脱。那里的JSTL <c:out>标签是非常合适的。默认情况下,它会转义HTML实体。使用它可以显示 每个 用户控制的输入,例如请求URL,请求标头和请求参数。
<c:out>
例如
<input type="text" name="foo" value="<c:out value="${param.foo}" />">
输入期间无需转义。XSS在原始Java代码和SQL数据库中均无害。另一方面,您也宁愿将未修改的数据保存在DB中,以便仍可以看到用户 实际 输入的内容,以便在必要时可以对可邮寄用户进行社交操作。
如果您想知道在输入过程中要转义的内容,那就是SQL injection。在这种情况下PreparedStatement,Statement只要您想在数据库中保存 任何 用户控制的输入,只要使用而不是常规即可。
PreparedStatement
Statement
create = connection.prepareStatement("INSERT INTO user (username, password) VALUES (?, MD5(?))"); create.setString(1, username); create.setString(2, password); create.executeUpdate();