Tauri の SQL プラグインは、デフォルトでパラメータ化クエリ(プリペアドステートメント)をサポートしています。
SQL インジェクション攻撃を防ぐために、変数を文字列結合で埋め込むことは絶対に避けてください。
前提条件
Permissions (権限) の設定
src-tauri/capabilities/default.json に以下の権限を追加します。
{
"permissions": [
...,
"sql:default"
]
}
危険な例 (アンチパターン)
// 絶対にやってはいけない!!
const sql = `SELECT * FROM users WHERE name = '${userInput}'`;
await db.select(sql);
userInput に ' OR '1'='1 のような文字列が含まれていると、全データが漏洩したり改ざんされたりします。
安全な例
// プレースホルダーを使用する
const sql = 'SELECT * FROM users WHERE name = $1';
await db.select(sql, [userInput]);
データベースエンジン側で値が適切にエスケープ処理されるため、特殊文字が含まれていても安全に扱われます。
プレースホルダーの記法
- SQLite:
$1,$2あるいは? - MySQL:
? - PostgreSQL:
$1,$2
移植性を考慮する場合、使用するDBに合わせて統一する必要がありますが、Tauri のプラグインでは配列の順番通りにマッピングされます。