ぽかぽかコード日和

とっても暑い夏の日にプログラミングはじめました☀️

【Security】SQL インジェクション+Laravel実装

概要 Webアプリケーションのユーザーの入力領域に 攻撃者が不正なSQL文を注入し、データベースに意図しない命令を実行させる攻撃手法。 ログインフォームや検索機能などを持つWebサイトは特に注意する。 発生しうる脅威 重要情報の漏洩 データベースに格納さ…

【Security】アクセス制御や認可制御の欠落+Laravel実装

概要 アクセス制御や認可制御の欠落とは、 認証や認可が不十分なために、攻撃者やユーザーが本来アクセスできないページに入り、情報を閲覧したり操作できてしまう状態のこと。 ログインできた(認証)後、ユーザーを識別して適切な権限を与える(認可)。 認証…

【Security】バッファオーバーフロー+Laravel実装

概要 ユーザーの入力領域に 攻撃者が悪意あるコードを含んだ大量のデータを送信してバッファを溢れさせる。 リターンアドレスが悪意のあるコードで上書きされ、処理されることにより システムに異常動作を発生させる攻撃手法。 「バッファ」 ・・・プログラ…

【Security】クリックジャッキング+Laravel実装

概要 正規サイトにログインした状態で、 攻撃者が罠サイトにユーザーを誘導しiframeや透明なレイヤーを使ってリンクやボタンを重ねて配置し、ユーザーに意図しない操作をさせる攻撃手法。 ユーザーが一見無害に見えるサイトのボタンをクリックすると、 実際…

【Security】メールヘッダ・インジェクション+Laravel実装

概要 メール送信機能を持つWebアプリケーションで出力処理に脆弱性があると、 攻撃者がメールのヘッダ情報に不正なデータを差し込むことで、不正な操作を実行する攻撃手法。 お問い合わせページやアンケートなどのサイトで特に注意が必要。 発生しうる脅威 …

【Security】HTTPヘッダ・インジェクション+Laravel実装

概要 ユーザーからの入力値の処理に脆弱性があると、 攻撃者がHTTPリクエストに罠を仕掛けてレスポンスを生成し、 ユーザーに偽のURLをクリックさせ、スクリプトを実行させたり情報を盗み取る攻撃。 改行コードが原因となることから「CRLFインジェクション」…

【Security】CSRF(クロスサイト・リクエスト・フォージェリ)+Laravel実装

概要 Webアプリケーションのセッション管理に脆弱性があり、 ユーザーがログインした状態で攻撃者の罠リンクを踏むことで、 ユーザーの知らないうちに攻撃者がユーザーになりすまして、不正な操作を実行する攻撃手法。 Cookieによるセッション管理、Basic認…

【Security】クロスサイト・スクリプティング(XSS)+Laravel実装

概要 Webアプリケーションの出力処理に脆弱性があると、 攻撃者にHTML内に悪意のあるスクリプトを埋め込まれる。 ユーザーのブラウザ上でスクリプトを実行させ、 出力されたその情報を盗み取る(攻撃者のサーバーに送信させるなど)攻撃。 Cookieを使ってログ…

【Security】セッション管理の不備+Laravel実装

概要 Webシステムでは、 CookieやセッションIDを使いアクセスしてきたユーザーがログイン済みかどうかを判定している。 攻撃者にCookieの中身やセッションIDを知られてしまうと、 ユーザーIDやパスワードを知らなくてもログイン済みのユーザーとして、 許可…

【Security】ディレクトリ・トラバーサル+Laravel実装

概要 ディレクトリ・トラバーサル攻撃とは、 外部からのパラメータをファイル名として直接指定しているWebアプリケーションで、 攻撃者が相対パスを使ってファイル名を指定し、非公開ファイルへアクセスする攻撃手法。 発生しうる脅威 重要情報の漏洩 サーバ…

【Security】OSコマンド・インジェクション+Laravel実装

概要 脆弱性のあるWebアプリケーションの入力領域(入力フォーム等)に、 攻撃者が悪意のあるOSコマンドを紛れ込ませ、Webサーバー上で不正に実行する攻撃手法。 発生しうる脅威 重要情報の漏洩 サーバーに格納されている重要な情報が盗まれる。企業の信頼を大…

【SQL】副問い合わせ(サブクエリ)

副問い合わせとは 副問い合わせとは、 SQL文の内部に別のSELECT文を記述すること。 1つのSQL文で2つ以上の処理ができ、DBMSに対して柔軟な指示ができる仕組み。 副問い合わせは、()で括って記述する。 WHERE・SELECT・FROM・HAVING句、INSERT/UPDATE/DELETE…

【MySQL】インデックスとは

インデックスとは、 データベースに作成できる「索引」のことで、検索を高速化するための仕組み。 テーブル全体を全件検索(フルスキャン)することなく、必要なデータに直接アクセスできる。 書籍の最後についている索引のようなもの。 インデックスは列(カラ…

【MySQL】TCL文(トランザクション)

データベース管理システム(DBMS)には、 安全で確実なデータ操作とデータ管理を保証するため トランザクションという仕組みがあり、それを操作・制御するSQL文をTCL文という。 DBMSによるデータの整合性を保つ方法は主に2つあり、 予期しない処理中断に対し…

【SQL】DCL文(GRANT・REVOKE)

DCL文(データ制御言語)とは、 データベースへのアクセス制御や権限の管理を設定するSQL文のこと。 「誰にどの操作を許可・禁止をするか」といった、データ操作(DML)やテーブル操作(DDL)を詳細に設定できる。 データベース管理者(DBA)や権限を持ったユーザー…

【SQL】DDL文(CREATE・ALTER・DROP)

DDL文(データ定義言語)とは、 データベースの構造を作成・変更・削除するためのSQL文のこと。 テーブルやインデックス、ビューを操作する。 →データ型一覧 作成(CREATE) CREATE TABLE テーブル名 ( 列名1 列名1のデータ型名, 列名2 列名1のデータ型名 ) テ…

【SQL】リレーションとテーブルの結合

リレーショナルデータベース(RDB)とは データベース構造の一種で、複数の表形式でデータを管理しているもの。 テーブルを分割していることでデータの管理が効率的になり、安全、確実、高速に処理しやすい。 ACID特性を持ち、トランザクション処理の信頼性と…

【SQL】SQLの関数

よく使う関数 LENGTH()・・・文字列の長さ LENGTH(列名) SELECT LENGTH(email) FROM customers; ☀︎メールアドレスが何バイトなのか。 名前などの文字数を数えたいときはCHAR_LENGTH()を推奨 TRIM()・・・空白の除去 CHAR型の列の空白を取り除くときに使う。 …

【SQL】算術演算子とCASE演算子

SELECT文の選択列リスト INSERT文のVALUES句 UPDATE文のSET句 で値の代わりに使える演算子をまとめてみました。 算術演算子 算術演算子はよく値の計算に使われるが、 日付の計算や文字列の連結にも使える(DBMSによって構文が異なる)。 構文 説明 数値 + 数値…

【SQL】集合演算・DISTINCT句・ORDER BY句

集合演算は、検索結果を組み合わせる。 DISTINCT句は、SELECT文の結果から重複した行を除く。 ORDER BY句は、取得したデータを指定した列名で並べ替える。 集合演算子 複数のテーブルのSELECT文の検索結果を1つにまとめる。 テーブル同士の検索結果の列数&…

【SQL】集計関数と抽出

集計関数とは、 グループ化された データや複数行(レコード)のデータに対して処理をかけて1つの値にまとめる関数のこと。 データの分析に活用できる。 NULL値は基本的に含めずに集計される。 集計関数を記述できる箇所は、 SELECT文の選択列リスト ORDER BY…

【SQL】WHERE句の演算子

WHERE句で条件の絞り込みに使う演算子をまとめました。 比較演算子 基本の比較演算子 意味 = 左右の値が等しい < 右の値より小さい > 右の値より大きい <= 以下 >= 以上 <> 左右の値が等しくない。「!=」でも可能 WHERE 条件1 = 条件2 ☀︎条件1と条件2が等し…

【SQL】DML文(INRERT・SELECT・UPDATE・DELETE)

SQLではデータの操作・定義・制御の3つができ、DML(データ操作言語)を使ってデータベースを操作する。 CREATE(作成) :INSERT文 READ(読み取り) :SELECT文 UPDATE(更新) :UPDATE文 DELETE(削除) :DELATE文 頭文字をとって「CRUD」や、「(SQLの)4大命令…

【SQL】データ型一覧

SQL

データベースに保存されているデータにはデータ型と呼ばれるルールがあり、どのように保存され、処理されるかが決まっている。 テーブルを作成するときにそれぞれの列(カラム)にデータ型を指定しており、その形式のデータしか入力できない。 データ型の選択…

【PHP】オブジェクト指向のクラスと基本概念

オブジェクト指向(OOP)とは プログラムをデータとそれを操作する処理の流れを一つのまとまりにした 「オブジェクト」を基本の単位で考え、プログラム全体をオブジェクト同士の関係として設計する手法。 オブジェクトを組み合わせることで、 各オブジェクトの…

【DB】データベースとは

データベース(DB)とは 様々な情報を集めて整理されたデータの集まりのこと。 検索や更新、分析のために蓄積され、電子的な媒体に構造化された形式で保存している。 データベース管理システム(DBMS)によって管理される。 外部から直接データベースにアクセス…

【Docker】Dockerの用語とコマンド

Dockerの用語 docker(ドッカー)とは 環境(開発・本番など)の設定を簡単に構築でき、 また、環境が違っても同じように動作させることができるツール。 コンテナと呼ばれる隔離された環境で作業ができる。 複数のコンテナを作れるため、 作業を分散して開発が…

【PHP】数字でピラミッドを作る

PHPのfor文のループで図形を作成するコードをまとめてみました。 応用して組み合わせると、さまざまな図形を作成できます。 はじめに(行数の制御) 全体で3行の図形を作成したいとき for($a = 1; $a <= 3; $a ++){ // ここに各行のコードを記述していく ech…

【Shell Script】シェル関数とreturn文

シェルスクリプトの 関数についてまとめました。 シェル関数とは シェル関数とは、 シェルスクリプト内で使用する、機能ごとに処理をまとめたもの。 同じ処理を複数回実行するときに便利。 コードの重複を減らし見やすさと作業効率が上がる。 メインルーチン…

【Shell Script】繰り返し処理

シェルスクリプトの 条件に合致している間は、同じ処理を何度も繰り返す処理 (for文、while/until文、select文)についてまとめました。 for文 for文は、指定した回数分、同じ処理を繰り返す。 for 変数名 in リスト do 処理 done リストに繰り返す値を複数…