sql-injection-prevention について
SQL インジェクションを防ぐためのセキュリティスキルです。プリペアドステートメント、パラメーター化クエリ、ORM の実践、入力検証を扱い、Node.js、Python、Java の実装例を含みます。
主な機能
- 01プリペアドステートメントの指針
- 02パラメーター化クエリの実践
- 03ORM の利用指針
- 04入力検証とサニタイズ
- 05動的値のホワイトリスト化
- 06言語別の実装リファレンス
活用シーン
- 01データベースクエリ開発の保護
- 02レガシーコードの注入リスク確認
- 03セキュリティ監査指摘への対応
- 04ユーザー入力を扱う API エンドポイントの保護
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ aj-geddes/ useful-ai-prompts --skill sql-injection-preventionインストール後、Claude Code で/sql-injection-preventionを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/input-validation-sanitization.mdjava-jdbc-with-prepared-statements.mdnodejs-with-postgresql.mdpython-with-sqlalchemy-orm.mdscripts/validate-schema.shtemplates/migration-template.sql詳細
SQL インジェクションの防止
目次
概要
プリペアドステートメント、パラメーター化クエリ、ORM のベストプラクティス、入力検証を使用して、包括的に SQL インジェクションを防止します。
使用する場面
- データベースクエリの開発
- レガシーコードのセキュリティレビュー
- セキュリティ監査での指摘事項の修正
- API エンドポイントの開発
- ユーザー入力の処理
- 動的クエリの生成
クイックスタート
最小限の実行可能な例:
// secure-db.js
const { Pool } = require("pg");
class SecureDatabase {
constructor() {
this.pool = new Pool({
host: process.env.DB_HOST,
database: process.env.DB_NAME,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
max: 20,
idleTimeoutMillis: 30000,
connectionTimeoutMillis: 2000,
});
}
/**
* ✅ SECURE: Parameterized query
*/
async getUserById(userId) {
const query = "SELECT * FROM users WHERE id = $1";
const values = [userId];
try {
const result = await this.pool.query(query, values);
// ... (see reference guides for full implementation)
リファレンスガイド
詳細な実装については、references/ ディレクトリを参照してください。
| ガイド | 内容 |
|---|---|
| Node.js with PostgreSQL | PostgreSQL を使用する Node.js |
| Python with SQLAlchemy ORM | SQLAlchemy ORM を使用する Python |
| Java JDBC with Prepared Statements | プリペアドステートメントを使用する Java JDBC |
| Input Validation & Sanitization | 入力検証とサニタイズ |
ベストプラクティス
✅ 推奨事項
- 必ずプリペアドステートメントを使用する
- ORM フレームワークを適切に使用する
- すべてのユーザー入力を検証する
- 動的な値は許可リストで管理する
- 最小権限の DB アカウントを使用する
- クエリログを有効にする
- 定期的にセキュリティ監査を実施する
- パラメーター化クエリを使用する
❌ 禁止事項
- ユーザー入力を連結する
- クライアント側の検証を信頼する
- クエリに文字列フォーマットを使用する
- テーブル名やカラム名を動的に指定できるようにする
- DB に過剰な権限を付与する
- 入力検証を省略する
コメント
Markdown 対応