セキュリティ

AI

ファイルアップロード機能、拡張子チェックだけで安全と思っていませんか?

ファイルアップロード機能の拡張子チェックだけでは不十分な理由と、安全な実装の基本(許可リスト方式・内容検証・保存先の設定)を解説します。
AI

本番環境のバックアップ、本当に復元できますか?開発者が確認すべきポイント

「バックアップを取っている」ことと「復元できる」ことは別の話です。情報漏えい・ランサムウェア被害に備えて、開発者が確認しておきたいバックアップ運用のポイントを解説します。
AI

Docker APIを無防備に公開していませんか?実例から学ぶ設定チェック

認証なしで公開されたDocker APIが侵入口として悪用された事例をもとに、安全な設定方法とチェックポイントを解説します。
AI

AIエージェントがWebサイトを自動攻撃する時代に、開発者が見直すべきこと

AIエージェントを悪用した自動攻撃が報告されています。何が起きているのか、開発者として今すぐ見直すべき入口・権限・検知の3つの視点を整理します。
Laravel

【Laravel】プロンプトインジェクション対策:安全にLLMを組み込む設計

こんにちは、かつコーチです。「LaravelへのLLM導入」シリーズもいよいよ最終回です。今回は、LLMをプロダクションで安全に運用するために避けて通れないプロンプトインジェクション対策について解説します。プロンプトインジェクションとは?プ...
Java

【Spring Boot】CSRF対策とSpring Securityのデフォルト設定

こんにちは、かつコーチです。フォームログインを実装したあと、POSTリクエストを送るテストコードを書いたら403 Forbiddenが返ってきて困った、という経験はありませんか。筆者も最初にこれに遭遇したとき、認証設定を疑って何時間も見当違...
JavaScript

【React】ReactアプリのXSS対策

こんにちは、かつコーチです。前回は、ログイン必須ページを守るProtected Routeの実装方法を解説しました。「誰がアクセスできるか」を制御できるようになったところで、今回は少し違う角度のセキュリティ対策を扱います。それがXSS(クロ...
Django

【Django】CSRF対策とDjangoのセキュリティミドルウェアを理解する

こんにちは、かつコーチです。「フォームを送信したら403 Forbiddenが出た」「CSRFトークンって何のために必要なの?」という質問は、Djangoでフォームを扱い始めた頃に必ずと言っていいほど出てくる悩みです。この記事では、Djan...
Laravel

【Laravel】パスワードハッシュ化(bcrypt)の仕組み

こんにちは、かつコーチです。ここまでSanctumによるAPI認証、Policy・Gateによる認可、CSRF対策、XSS対策と、Laravelのセキュリティ機能を順番に見てきました。今回はその締めくくりとして、認証の土台となるパスワードの...
Laravel

【Laravel】XSS対策:Bladeのエスケープ処理を理解する

こんにちは、かつコーチです。前回はCSRF対策について解説しました。今回は、もう一つの代表的なWeb脆弱性であるXSS(クロスサイトスクリプティング)と、Laravelの標準テンプレートエンジンBladeがどう対策しているかを見ていきます。...
Laravel

【Laravel】CSRF対策の仕組みとLaravelでの実装

こんにちは、かつコーチです。前回はPolicy・Gateを使った認可の仕組みを扱いました。今回は、Webアプリのセキュリティで必ず押さえておきたいCSRF(クロスサイトリクエストフォージェリ)対策について解説します。Laravelは標準でC...
Oracle Database

【Oracle Database】表領域とユーザー・権限管理の基本

こんにちは、かつコーチです。Oracle Database編の5本目です。今回は上級者向けの内容として、Oracle独自の表領域設計と、ユーザー・権限管理を扱います。PL/SQLの基本、シーケンス・ROWNUM・ROWIDの違いを理解してい...
AWS

【AWS】IAMユーザー作成とMFA設定で不正利用を防ぐ

こんにちは、かつコーチです。前回の記事で「ルートユーザーは日常作業に使わない方がいい」とお伝えしました。では実際にはどうすればいいのかというと、答えはIAMユーザーを作成して、そちらで日常的な作業を行うことです。この記事では、作業用IAMユ...
PostgreSQL

【PostgreSQL】Row-Level Securityでマルチテナントのデータを守る実践ガイド

こんにちは、かつコーチです。マルチテナント(1つのデータベースで複数の顧客・組織のデータを扱う構成)のSaaSを設計していると、必ず突き当たるのが「テナントAのデータがテナントBに見えてしまわないか」という不安です。アプリケーションコードで...
PostgreSQL

【PostgreSQL】ロールベースの権限管理をCREATE ROLEでゼロから設計する

こんにちは、かつコーチです。「アプリからは全部postgresユーザーで接続している」というプロジェクト、実は少なくありません。これは動作こそしますが、セキュリティの観点では避けたい設計です。PostgreSQLにはロール(ユーザーとグルー...
MySQL

【MySQL】SQLインジェクション対策とプレースホルダの使い方

こんにちは、かつコーチです。「ログインフォームに' OR '1'='1と入力するだけで、誰でもログインできてしまう」こんな話を聞いたことはないでしょうか。これはSQLインジェクション(ユーザーの入力値をそのままSQL文に組み込むことで、意図...
MySQL

【MySQL】ユーザー権限管理:GRANT・REVOKEの基本

こんにちは、かつコーチです。「アプリのDB接続用ユーザーに、うっかりrootを使い続けていませんか」開発中はつい楽なのでrootユーザーで全部済ませてしまいがちですが、これは本番運用ではかなり危険な状態です。もしアプリにSQLインジェクショ...
JavaScript

【Vue】VueアプリのXSS対策

こんにちは、かつコーチです。前回は、Vueアプリに認証機能を実装するパターンを解説しました。認証・セキュリティ編の2本目となる今回は、Webアプリの代表的な脆弱性であるXSS(クロスサイトスクリプティング)への対策を扱います。XSSとは?悪...
Ruby

【Ruby on Rails】CSRF対策とStrong Parametersでセキュリティを守る

こんにちは、かつコーチです。「Railsはデフォルトで安全」とよく言われますが、その裏でどんな仕組みが動いているか説明できますか。この記事では、protect_from_forgeryによるCSRF対策と、Strong Parameters...
PHP

【PHP】プリペアドステートメントでSQLインジェクションを防ぐ方法

こんにちは、かつコーチです。前回まで、固定のSQL文をPDOで実行してデータを取得する方法を見てきました。ですが実際のアプリでは、フォームから送られてきたユーザーの入力値をSQLに組み込む場面がほとんどです。このとき書き方を間違えると、SQ...