【2026年版】Webセキュリティ完全ガイド|OWASP Top 10・SQLインジェクション・XSS対策を実践コードで解説

2026年のWebセキュリティトレンドと主要脅威

Webセキュリティの重要性は年々高まっています。2026年現在、AIを活用した攻撃手法の高度化・サプライチェーン攻撃の増加・API攻撃の急増が顕著です。本記事ではエンジニアが必ず押さえておくべきWebセキュリティの基礎と実践的な対策を解説します。

OWASP Top 10(2025年版)

  • A01: アクセス制御の不備:最も多い脆弱性。認可チェックの漏れ
  • A02: 暗号化の失敗:不適切な暗号化・平文での機密情報送受信
  • A03: インジェクション:SQLインジェクション・XSSなど
  • A04: 安全でない設計:セキュリティを考慮しない設計上の欠陥
  • A05: セキュリティの設定ミス:デフォルト設定のまま使用
  • A06: 脆弱なコンポーネントの使用:古いライブラリ・フレームワークの使用
  • A07: 識別と認証の失敗:弱いパスワード・セッション管理の不備
  • A08: ソフトウェアとデータの整合性の失敗:CI/CDの脆弱性
  • A09: セキュリティログとモニタリングの失敗:不十分なログ・監視体制
  • A10: SSRF(サーバーサイドリクエストフォージェリ):内部サービスへの不正アクセス

SQLインジェクション対策

SQLインジェクションは、ユーザー入力をSQLクエリに直接埋め込むことで発生する脆弱性です。プリペアドステートメントを使用することで防げます。

脆弱なコード(NG)vs 安全なコード(OK)

// NG: ユーザー入力を直接SQLに埋め込む(危険)
const query = "SELECT * FROM users WHERE username='" + username + "'";

// OK: プリペアドステートメントを使用
const query = 'SELECT * FROM users WHERE username = ?';
db.query(query, [username]);

// Prisma ORMを使用(最も安全)
const user = await prisma.user.findUnique({
  where: { username: username },
});

XSS(クロスサイトスクリプティング)対策

// NG: ユーザー入力をそのままHTMLに挿入
element.innerHTML = userInput;

// OK: テキストノードとして挿入(自動エスケープ)
element.textContent = userInput;

// Reactは自動エスケープ(通常のJSX使用時)
return <div>{userContent}</div>;

認証・認可のベストプラクティス

// JWTの安全な実装例
const accessToken = jwt.sign(
  { userId: user.id, role: user.role },
  process.env.JWT_SECRET,
  { expiresIn: '15m' } // 短い有効期限が重要
);

HTTPセキュリティヘッダー設定

// Express.jsでHelmetを使ったセキュリティヘッダー
import helmet from 'helmet';
app.use(helmet({
  contentSecurityPolicy: true,
  hsts: {
    maxAge: 31536000,
    includeSubDomains: true,
    preload: true
  },
}));

依存関係の脆弱性管理

npm audit           # 脆弱性チェック
npm audit fix       # 自動修正
npx snyk test       # Snykで高度なチェック

まとめ

Webセキュリティは後から追加するものではなく、開発初期から設計に組み込むべきものです。プリペアドステートメント・適切なエスケープ処理・最小権限の原則・依存関係の定期更新を習慣化することで、多くの脆弱性を防ぐことができます。

投稿者 kasata

IT企業でエンジニアとして勤務後、テクノロジー情報メディア「Tech Athletes(テック・アスリート)」を運営。プログラミング、クラウドインフラ(AWS/GCP/Azure)、AI活用、Webサービス開発を専門とする。エンジニア・ビジネスパーソン向けに、実際に使ってみた経験をもとに信頼できる技術情報を発信中。資格:AWS認定ソリューションアーキテクト、Python 3 エンジニア認定試験合格。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です