Java 包含正斜杠字符的web jsp表单中的mySQL插入问题
我有一个jsp表单,用户可以在其中包含以下字符串,例如: 这是一个测试/Java 包含正斜杠字符的web jsp表单中的mySQL插入问题,java,mysql,jsp,Java,Mysql,Jsp,我有一个jsp表单,用户可以在其中包含以下字符串,例如: 这是一个测试/ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { description = request.getParameter("description "); String mysqlQuery= "insert into data va
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
description = request.getParameter("description ");
String mysqlQuery= "insert into data values (default,'" + description + "');";
int Res = St.executeUpdate(mysqlQuery);
...
}
问题就在这里。当我检查mySQL表数据时,我发现description列缺少/:
这是一个测试
为了解决这个问题,我尝试使用String.replaceAll方法,但是这个方法既不喜欢“/”也不喜欢“\”,编译器会出错。有没有更好的方法来解决这个问题?嗯,
你能试试这个吗
preparedStatement = connection.prepareStatement("INSERT INTO data (default, description, .., ....) VALUES (?, ?, ?, ?)");
preparedStatement.setInt(1,0);
preparedStatement.setString(2, data.getDescription());
preparedStatement.setTimestamp(3, ...);
.....
preparedStatement.executeUpdate();
注:
准备报表的优点:
- SQL语句的预编译和数据库端缓存导致 总体而言,执行速度更快并且能够重用相同的SQL 语句的批处理
- 通过的内置转义自动防止SQL注入攻击 引号和其他特殊字符。请注意,这要求您 使用任何PreparedStatement setXxx()方法设置值
- PreparedStatement是防止SQL注入攻击的一种非常好的防御(但不是万无一失的)李>
谢谢 使用事先准备好的陈述。您的代码是一个巨大的攻击邀请。您是否检查了description的值是否不为null?这起作用,但需要更改默认关键字的代码。谢谢。