说明
日期:2025年6月6日。
有以下查询需求:
SELECT * FROM users WHERE email ='billy@gmail.com'
AND encrypted_password ='$10$WMT9Y'
web应用实现代码:
Connection connection= DriverManager. getConnection(DB_URL, DB_USER, DB_PASSWORD);
Statement statement = connection. createStatement ();
String sql ="SELECT* FROM users WHERE email='"+ email+
"'AND encrypted _password="'+ password + " " ' ;
statement.executeQuery(sql);
用户传送billy@gmail.com'--
即可进行攻击,实现无密码登录:
statement .executeQuery(
"SELECT * FROM users WHERE email='billy@gmail.com'--'AND encrypted_
password= 'Z$DSA92HO'");
示例
日期:2025年6月6日。
应用:
- node.js v22.15.1
- npm v11.4.1
- sqlite3 --version:3.45.1 2024-01-30
async function queryDatabase(dbName, sql, params) {
// 创建数据库连接并等待打开
const db = await new Promise((resolve, reject) => {
const database = new sqlite3.Database(dbName, (err) => {
if (err) return reject(err);
resolve(database);
});
});
try {
// 执行参数化查询
const results = await new Promise((resolve, reject) => {
db.all(sql, params, (err, rows) => {
if (err) return reject(err);
resolve(rows);
});
});
return results;
} finally {
// 始终尝试关闭数据库连接
await new Promise((resolve, reject) => {
db.close((err) => {
if (err) {
console.error('Database close fail: ', err.message);
reject(err);
} else {
resolve();
}
});
}).catch(() => { /* 已记录错误,无需处理 */ });
}
}
const certNumber = '1234567';
results = await queryDatabase('CERTIFICATE.DB', 'SELECT * FROM CERTIFICATE WHERE NUM = ? LIMIT 1;', [certNumber]);