
セキュリティを知らないエンジニアは「危険」
セキュリティを知らないエンジニアは「危険」
プログラミングを学ぶとき、セキュリティについて体系的に学ぶ機会は意外と少ないものです。しかし、Webエンジニアとして現場に出るなら、セキュリティの基礎知識は必須です。
セキュリティの脆弱性を含むコードを本番環境にリリースすると、ユーザーの個人情報漏洩や、サービスの信頼性失墜など、取り返しのつかない事態を招きます。
3大脆弱性を理解する
Webアプリケーションで特に注意すべき脆弱性は3つあります。
1. XSS(クロスサイトスクリプティング)
どんな攻撃か
攻撃者が悪意のあるJavaScriptコードをWebページに埋め込む攻撃です。
たとえば、掲示板のコメント欄に<script>悪意のあるコード</script>と投稿すると、そのページを閲覧した他のユーザーのブラウザで悪意のあるコードが実行されてしまいます。
被害の例
- ユーザーのCookie(セッション情報)が盗まれ、アカウントが乗っ取られる
- フィッシングサイトへリダイレクトされる
- ページの内容が改ざんされる
対策
- ユーザー入力を必ずエスケープする — HTMLの特殊文字(
<、>、&、")を無害化する - ReactやVueなどのフレームワークを使う — デフォルトでエスケープ処理が行われる
dangerouslySetInnerHTML(React)は極力使わない — 使う場合はサニタイズ処理を必ず行う- Content Security Policy(CSP)を設定する — 信頼できるソースからのスクリプトのみ実行を許可する
2. CSRF(クロスサイトリクエストフォージェリ)
どんな攻撃か
ユーザーがログイン中のWebサービスに対して、ユーザーの意図しないリクエストを送信させる攻撃です。
たとえば、あなたがネットバンキングにログインした状態で、攻撃者が仕掛けた悪意のあるページを開くと、あなたの口座から送金が実行されてしまう可能性があります。
対策
- CSRFトークンを使用する — リクエストごとに一意のトークンを生成し、正規のリクエストかを検証する
- SameSite Cookie属性を設定する — クロスサイトからのリクエストにCookieを送信しない
- 重要な操作には再認証を求める — パスワード変更や送金時に、再度パスワードを入力させる
3. SQLインジェクション
どんな攻撃か
ユーザー入力を通じて、データベースに不正なSQL文を実行させる攻撃です。
たとえば、ログインフォームのメールアドレス欄に特殊な文字列を入力することで、認証をバイパスしたり、データベースの全データを取得されたりする危険があります。
対策
- プリペアドステートメント(パラメータバインディング)を使う — ユーザー入力をSQL文の一部としてではなく、値として扱う
- ORMを使う — TypeORM、Prismaなどのフレームワークは、SQLインジェクション対策が組み込まれている
- 入力値のバリデーション — メールアドレス形式、数値範囲などを事前にチェックする
セキュリティも学べる実践型カリキュラム
その他知っておくべきセキュリティ対策
認証・認可
| 項目 | 説明 |
|---|---|
| パスワードのハッシュ化 | パスワードを平文で保存しない。bcryptなどでハッシュ化する |
| JWTの適切な管理 | トークンの有効期限を設定し、HTTPOnly Cookieで管理する |
| 最小権限の原則 | ユーザーに必要最小限の権限だけを付与する |
通信の保護
- HTTPS通信の強制 — HTTP通信は盗聴される可能性がある
- CORS設定 — 許可するオリジン(ドメイン)を明示的に指定する
- セキュリティヘッダーの設定 —
X-Frame-Options、X-Content-Type-Optionsなどを設定する
データの保護
- 環境変数にシークレット情報を保存する — APIキーやパスワードをソースコードに直接書かない
.envファイルを.gitignoreに含める — 誤ってGitHubに公開しない- 個人情報の取り扱い — 必要最小限のデータのみ収集し、適切に暗号化する
セキュリティは「後から」では遅い
セキュリティ対策は、開発の最後に付け足すものではありません。設計段階から意識し、コーディングの一部として組み込むことが重要です。
LuaGateの18ヶ月カリキュラムでは、セキュリティの基礎知識を学ぶだけでなく、実際のWebアプリケーション開発の中で脆弱性を防ぐコーディングを実践します。実践型No1女性スクールとして、現場で信頼されるエンジニアを育成しています。
API設計の基礎知識
フロントとバックエンドをつなぐ仕組みを理解する
エラーハンドリングの考え方
本番環境で動くコードの書き方
現場で通用するエンジニアスキル
スクールでは学べない実務力の全体像
LuaGateのカリキュラム
18ヶ月で実務力を身につける実践型カリキュラム




