「セキュリティ、何から学べばいい?」と悩んでいませんか?
現役WEBエンジニアとして、セキュリティを意識した開発を行っています。
この記事では、開発者が最低限知るべきセキュリティ知識を解説します。
目次
OWASP Top 10
主要な脆弱性
| 脆弱性 | 概要 |
|---|---|
| インジェクション | SQL、コマンド注入 |
| 認証の不備 | セッション管理ミス |
| XSS | スクリプト挿入 |
| CSRF | リクエスト偽造 |
SQLインジェクション
危険な例
// ダメな例
const query = `SELECT * FROM users WHERE id = ${userId}`;
// 安全な例(プリペアドステートメント)
const query = 'SELECT * FROM users WHERE id = ?';
db.query(query, [userId]);
対策
- プリペアドステートメント使用
- ORM活用
- 入力値検証
XSS対策
種類
| 種類 | 説明 |
|---|---|
| 反射型 | URLパラメータ経由 |
| 格納型 | DBに保存される |
| DOM型 | クライアント側で発生 |
対策
// エスケープ処理
function escapeHtml(str) {
return str
.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"');
}
- 出力時のエスケープ
- CSPヘッダー設定
- HTTPOnly Cookie
認証・認可
ベストプラクティス
- パスワードハッシュ化(bcrypt)
- セッション管理
- JWT適切な運用
- 多要素認証
パスワードハッシュ
const bcrypt = require('bcrypt');
const hash = await bcrypt.hash(password, 10);
const isValid = await bcrypt.compare(input, hash);
HTTPS
必須の理由
- 通信の暗号化
- 改ざん防止
- SEO評価
設定ポイント
- SSL証明書導入
- HTTP→HTTPSリダイレクト
- HSTSヘッダー
依存パッケージ
脆弱性チェック
# npm
npm audit
npm audit fix
# yarn
yarn audit
定期更新
- Dependabot活用
- 定期的なアップデート
- 脆弱性情報のチェック
環境変数管理
やるべきこと
# .envファイル
DATABASE_URL=xxx
API_KEY=xxx
# .gitignore
.env
.env.local
- 秘密情報はコードに書かない
- .envは.gitignoreに追加
- 本番は環境変数で管理
まとめ
開発者セキュリティのポイント:
- OWASP Top 10を理解
- 入力検証・出力エスケープ
- 認証・認可を適切に
- 依存パッケージを管理
