gpt4 book ai didi

Java - 转义字符串以防止 SQL 注入(inject)

转载 作者:搜寻专家 更新时间:2023-11-01 00:54:24 25 4
gpt4 key购买 nike

我正在尝试在 Java 中放置一些反 SQL 注入(inject),但发现很难使用“replaceAll”字符串函数。最终我需要一个函数,将任何现有的 \ 转换为 \\,将任何 " 转换为 \",任何'\',任何 \n\\n 以便当字符串被 MySQL 评估时SQL注入(inject)将被阻止。

我提取了一些正在使用的代码,函数中的所有 \\\\\\\\\\ 都让我眼花缭乱。如果有人碰巧有这方面的例子,我将不胜感激。

最佳答案

PreparedStatements 是必经之路,因为它们使 SQL 注入(inject)变得不可能。这是一个将用户输入作为参数的简单示例:

public insertUser(String name, String email) {
Connection conn = null;
PreparedStatement stmt = null;
try {
conn = setupTheDatabaseConnectionSomehow();
stmt = conn.prepareStatement("INSERT INTO person (name, email) values (?, ?)");
stmt.setString(1, name);
stmt.setString(2, email);
stmt.executeUpdate();
}
finally {
try {
if (stmt != null) { stmt.close(); }
}
catch (Exception e) {
// log this error
}
try {
if (conn != null) { conn.close(); }
}
catch (Exception e) {
// log this error
}
}
}

无论name和email是什么字符,这些字符都会直接放入数据库中。它们不会以任何方式影响 INSERT 语句。

不同的数据类型有不同的设置方法——您使用哪种方法取决于您的数据库字段是什么。例如,如果数据库中有一个 INTEGER 列,则应使用 setInt 方法。 The PreparedStatement documentation列出了可用于设置和获取数据的所有不同方法。

关于Java - 转义字符串以防止 SQL 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48286109/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com