Study Blog

学習のアウトプットや感じた事を発信していきます

2022.04.19.Computer System 授業内容

この記事は職業訓練校の受業の内容の要点をまとめたものです。 職業訓練校を検討されている方が居たら参考にしてください。

2022.04.19.Computer System

コンピュータ構成要素

この回ではコンピュータを構成する装置とそれぞれの役割、そしてCPU内部の仕組みを学習します。

到達目標

  • コンピュータの5大装置を知り、当人なりに説明できる。
  • プログラム動作の仕組みを知り、当人なりに説明できる。
    • (計算問題の準備)コンピュータの補助単位を知る。
  • フローチャートと疑似言語の、『分岐構造』を、読み書きできる。

決定表(デシジョンテーブル)

条件とそれに対する行動を整理した表のこと。

記述ルール

  • 見出し部
    • どういった決定表なのかを示す(名前を付ける)
  • 条件表題部
    • 条件を記入
  • 条件記入部
    • Y(YES): 条件が満たされるとき
    • N(NO): 満たされないとき
    • -: 行動に影響を与えない
  • 行動表題部
    • 行動を記入
  • 行動記入部

    • X: 実行するとき
    • -: 実行しないとき
  • 見方としては縦に見る。

    • 条件 -> 行動(結果)が出されるので、書く際も縦に考えた方が良いであろう。

出題分析(過去問)

  • システム開発で用いる設計技法のうち、決定表を説明したのはどれか。
    • (ウ)
      • 条件の組み合わせとそれに対する動作とを表現したものである。

ITパスポート過去問

出典:平成22年秋期 問69

二つの変数xとyに対して,次の手続きを(1)から順に実行する。処理が終了したとき,xの値は幾らになるか。

〔手続き〕 (1) xに2を代入し,yに3を代入する。 (2) yの値から1を引いたものをyに代入する。 (3) xの値とyの値を加えたものをxに代入する。 (4) y≠1なら手続き(2)に戻り,y=1なら終了する

x = 2, y = 3 y = y - 1 // y = 2 x = x + y // x = 4 -> y = 2 なので (2)へ戻る y = y - 1 // y = 1 x = x + y // x = 5 -> y = 1 なので、処理を終了する この時のxは、5。

ITパスポート平成22年春期 問79

業務の改善提案に対する報奨を次の行に基づいて決めるとき,改善額が200万円で,かつ,期間短縮が3日の改善提案に対する報奨は何円になるか。ここで表は,条件が成立の場合は Y を,不成立の場合は N を記入し,これらの条件に対応した時の報奨を○で表してある。 -> 10,000円

出典:平成16年秋期 問15 アルゴリズム

試験の合否を判定する次の決定表から読み取れるものはどれか。ここで,試験は労務管理経理及び英語の3科目で構成され,それぞれの満点は100とする。 -> (エ)

出典:平成21年春期 問21 ファイルシステム

絶対パス名 ¥a¥a¥b¥c を持つディレクトリがカレントディレクトリであるとき、相対パス .¥..¥..¥a¥b¥file をもつファイルを絶対パス名で表現したものはどれか。 ここで、ディレクトリ及びファイルの指定方法は、次の規則に従うものとする。 -> \a\a\a\b\file 手書きで書いた方が理解しやすい。

センサー技術

  • 情報の収集・転送
  • ウェアラブルバイス
    • 使用者が身に着ける端末のこと
    • ヘルスケアの分野で多くのサービスや製品が登場している
    • 将来的には蓄積されたデータの利活用が期待される
  • センサーの種類
    • 音や照度、圧力、超音波、電磁気、顔や指紋などの人感センサーなど
    • 人間の五感に相当する感覚、自然界の物理現象、科学的性質などを読み取るものなど
    • ありとあらゆる種類のセンサーがある
      • こうしたセンターから検出した情報は、インターネットを介してクラウドに送信される 情報を収集・分析するIoTの要素であるセンサーはモノ自体と、その周辺環境の状態を感知しデータを収集するために欠かせないものである。
  • モノとの組み合わせ方によって、得られるデータの質や幅が広がる
  • センサーによって収集できるデータの種類は多種多様
    • 例えば目や耳、鼻や舌といった「人間の感覚器」に例えると把握しやすい
    • 例: カメラ・赤外線 -> 目(感覚), マイク -> 耳(聴覚), etc...
  • センサーを検出の対象で分類
    • 内界センサー
    • 外界センサー
      • 機器の外部状況を検出
      • 接触
        • 圧力センサーのように、物理的に何かと接触することでデータを収集するセンサー
      • 接触
        • 光センサーやマイクロフォン、超音波、温度などが挙げられ、これらは光や音など実際に何かと接触することなく、外界の状況からデータを収集するタイプ

コンピュータシステム

合格教本第2章

  • コンピュータ構成要素
    • プロセッサ、メモリ、入出力装置など

      プロセッサ

  • 内容はコンピュータの仕組み全体を含んでいる
  • 動作原理としては論理回路とアドレッシングの出題が目立つ

    コンピュータの構成と動作

  • コンピュータの中身

    • 制御装置
    • 演算装置
    • 記憶装置(主記憶装置・補助記憶装置)
    • 入力装置
    • 出力装置
  • 処理装置

    • 一般的にはCPU, プロセッサと呼ばれる
    • 演算装置や制御装置を持つ
    • コンピュータの中核装置として、演算処理や各装置への制御を行う

上記のような(コンピュータの中身の)基本構造(コンピュータアーキテクチャ)の大元は、数学者フォン・ノイマンが提唱したのノイマン型コンピュータと呼ばれるコンピュータである。

ノイマンコンピュータ

  • プログラム内蔵方式(stored program)
    • あらかじめプログラムとデータを主記憶装置(メモリ)に格納しておく方式
    • プログラムやデータを入れ替える事で、処理内容の変更に容易に対応できる
    • ストアドプログラムとも呼ばれる
  • 逐次制御方式(sequential control)
    • 命令を主記憶装置から取り出して解読し、その内容によってデータを取り出し、処理を実行するという一連の流れを自動式に繰り返すことで、プログラムを実行していく方式
      • 自動的に繰り返す処理
        • ①命令を主記憶装置から取り出す
        • ②取り出した命令を解読
        • ③解読した内容にそってデータを取り出す
        • ④処理を実行
        • ⑤ -> ①に戻る
    • 逐次制御に対して、先回り制御を行うパイプライン処理が考え出されている

ノイマン型コンピュータ

脳神経回路の仕組みをもとにしたニューロコンピュータ、量子力学を情報処理に応用した量子コンピュータなどが挙げられる

昔はコンピュータと言ったらノイマン型コンピュータしかなかった。

CPUの種類

  • CISC(Complex Instruction Set Computer)
    • 複雑な処理を1命令で実行するために、マイクログラムを採用したCPUのアーキテクチャのこと
    • マイクロプログラム制御方式
    • Intel / AMD
  • RISC(Reduced Instruction Set Computer)

    • CISCより効率よく動作させる方式として考え出されたアーキテクチャのこと
    • 命令数を減らして単純化し、1命令の長さとその実行時間を一定にすることでパイプライン処理などの高速化を実現している
    • 単純な命令をハードウェアで実行し、複雑な処理はその組み合わせで実行する
    • ワイヤドロジック制御方式
  • パソコン&サーバ: CISC

    • 現在のパソコンに使われるCPUの主流はCISC
  • 組み込み: RISC

    • 低電圧で稼働する事

CISCの特徴

  • 命令セット
    • 簡易な命令から高機能な命令まで多くの種類がある
  • 命令長
    • 命令ごとに異なり、長い
  • レジスタ
    • 少ない
  • 命令実行方式
    • マイクロプログラム制御方式
  • パイプライン処理
    • 適さない
  • 同一処理当たりのステップ数
    • 少ない

RISCの特徴

パッパと処理したい - 命令セット - 単純な基本的な命令に制限される - 命令長 - 固定長で短い - レジスタ数 - 多い - 命令実行方式 - ワイヤドロジック制御方式 - パイプライン処理 - 適する - 同一処理当たりのステップ数 - 多い

マイクロプログラム制御の特徴

  • 処理速度
    • 低速
  • 拡張性・機能保守
    • 容易
  • エミュレーション
    • 可能

      ワイヤドロジック制御の特徴

  • 処理速度
    • 高速
  • 拡張性・機能保守
    • 困難
  • エミュレーション
    • 不可能

CPUの構成と動作の仕組み

  • レジスタとは
    • 高速で容量の小さな記憶装置のこと
  • CPU
    • 演算装置と制御装置で構成され、たがいに連携しながら処理を行う。
    • レジスタを持ち、命令解読、演算を実行していく

レジスタの種類

制御装置内にある制御用レジスタと、演算装置内にある演算用レジスタに分けられる。 - 制御用レジスタ - 命令アドレスレジスタ(IAR: Instruction Address Redister) - 次に実行する命令のアドレスを記憶する - 色々な別名がある(それだけ試験に出ているということ) - プログラムカウンタ、プログラムレジスタ、命令カウンタ、逐次制御カウンタ - 命令レジスタ(IR: Instruction Register) - 主記憶から読みだされた命令を収納するレジスタ - 内容は命令解読器で解読される - 演算用レジスタ - アキュムレータ(塁算器) - 演算装置内にある演算用レジスタで、演算結果や演算途中のデータ格納される - インデックスレジスタ(インデックス = 指標) - 命令の番地部(アドレス部)を指定する値が入る - 汎用レジスタ - 計算用、アドレス指定用など、さまざまな用途に使われるレジスタで、複数が備わっている

プログラム動作の仕組み

  • コンピュータは、「入力する」「計算する」「出力する」などの基本動作を指示する「命令」によって動いている。
    • これら一連の命令を組み合わせたものがプログラムである。
  • プログラムの実行に先立ち、主記憶装置上の連続した領域にプログラムが格納(ロード)され、実行開始番地(アドレス)がプログラムレジスタにセットされ、同時に必要なデータも主記憶装置に読み込まれる。
    • -> プログラムの実行に先立って、メモリ上(主記憶装置上の連続した領域)に複数のプログラム(命令)が格納される。この格納を、ロードという。
  • 主記憶装置上のプログラムは、命令サイクル実行サイクルを繰り返すことで処理を進めていく。

命令サイクル(Iサイクル: Instruction fetch cycle)

  • 主記憶装置から命令を取り出し、命令を解読する一連の工程のこと
  • 命令フェッチとも呼ばれる。

実行サイクル(Eサイクル: Execution cycle)

  • 命令を解読し、解読された命令をアドレス番地に基づいて、実行 -> 処理結果の書き込みを行う工程のこと

CPU命令実行サイクル

ひと命令の実行は、「命令読み出し」 ->「命令の解読」 -> 「有効アドレスの計算」 -> 「オペランドの取り出し」 -> 「命令の実行」 -> 「結果の書き込み」 と言ったステージに分割される。 それぞれのステージの実行にかかる時間をマシンサイクルと呼ぶ。

  • ①命令フェッチ(Fetch)
    • 命令を主記憶から取り出し、CPUの命令レジスタに取り込む
  • ②命令の解読(Decode)
    • 命令コードを解読する
  • ③実行アドレス計算(Address Calculation)
    • 命令対象となるオペランドの格納場所を計算して求める
  • オペランド読み出し(Read)
    • 主記憶の実行アドレスにアクセスし、オペランドを読み出す
  • ⑤命令の実行(Execution)
    • 命令を実行し、必要に応じて結果データを主記憶に書き込む

単位、補助単位とべき乗

  • コンピュータで利用される単位は、次のようになる。
    • bit(ビット) = コンピュータで表現される最小単位。情報は0か1のみ。
    • byte(バイト) = 8ビット -> 1バイト

以下、補助単位 - T(テラ) --> 10¹² - G(ギガ) --> 10⁹ - M(メガ) --> 10⁶ - k(キロ) --> 10³ - m(ミリ) --> 10⁻³ - μ(マイクロ) --> 10⁻⁶ - n(ナノ) --> 10⁻⁹ - p(ピコ) --> 10⁻¹²

2022.04.18 DataScienceA 授業内容

この記事は職業訓練校の受業の内容の要点をまとめたものです。 職業訓練校を検討されている方が居たら参考にしてください。

DataScienceA 2022.04.18

OR手法

基本技術者試験ドットコムから

  • 最適化
    • 最大化
    • 最小化

上記問題を線形計画法で解く

  • 定式化とは
    • 目的関数(Objective Function): max. Z = 100x + 150y
    • 制約条件:
      • A --> 2x + y ≦ 100
      • B --> x + 2y ≦ 80
      • x , y ≧ 0 //非負条件
        • 製品は作るか作らないか(0個以上作る)

2x + y = 100 x + 2y = 80 y = 100 - 2x x = 80 - 2y

x + 2(100 - 2x) = 80 x + 200 - 4x = 80 200x - 4x = 80 x - 4x = -120 -3x = -120 x = 40

2(80 - 2y) + y = 100 160 -4y + y = 100 -3y = -60 y = 20 100 * 40 + 150 * 20 = 4000 + 3000 --> 7000


LP問題 連立方程式を解く

// 先生の解き方 ① 2x + y = 100 ② x + 2y = 80 ①' 4x + 2y = 200 // xを消すために全体に2をかける ①'-② 4x + 2y = 200 - x + 2y = 80 = 3x = 120 --> x = 40 ②にx=40を代入 40 + 2y = 80 --> 2y = 40 --> y = 20 Z = 100x + 150y に上記x, yを代入してZを求める。


なぜ連立方程式を解くのか!

グラフによる線形計画法の最適解 解放イメージ 端点(交点)で最適解 線形計画法の問題は、交点(端点と呼ぶ)にあり!

線形計画法の定式化

  • 目的関数: z = x + y
  • 制約条件
    • ① 2x + 3y ≦ 12
    • ② 2x + y ≦ 8
    • x ≧ 0
    • y ≧ 0 連立方程式は上記4つを全て満たしているということ。

目的関数 z の最大値及び最小値を求めよ。 ①の式にx=0を入れた時の点(x0, y4)となり、グラフに点を入れる。 ①の式にy=0を入れた時の点(x6, y0)となり、グラフに点を入れる。 --> 2点を繋ぐ線を引く(≦ 12を示している) ②の式にも同様にx=0, y=0 を入れ、2点を求め、線を引く。 ①かつ、②の範囲の四角形が出る(4つの角が出る = 交点) 上記2線がぶつかった点を③とする。

目的関数(慣例的にzとする) z = x + y z - x = y y = -x + z (x = z - y) zは定数、切片と呼ぶ。 -x は -45°の線 この-45°の線を動かしていく。 x ≧ 0, y ≧ 0 なので、最小化はx0, y0を通った時なので0 最大化は-45°の線が③と重なった時のyを求めると出る。 ※y = -x + z と z = x + y は同じ式(変形しただけ)

LP問題

  • 生産
  • 栄養
  • 輸送

Excel (Solver)

手順

ファイル -> オプション -> アドイン -> 設定 -> ✅ソルバーアドイン -> ok

  • Excelの四則演算
      • -> +
      • -> -
    • × -> *
    • ÷ -> /

2022.04.15GameProductionBasic 2022.04.15 授業内容

この記事は職業訓練校の受業の内容の要点をまとめたものです。 職業訓練校を検討されている方が居たら参考にしてください。

GameProductionBasic

流れ

ガイダンス

最近のゲーム業界について

ゲーム(電源ゲーム)をプレイする媒体

媒体の歴史

☆インターネットを使用しているかしていないかで別れる

ゲーム制作の歴史

  • かつてのゲーム制作
    • 人員、費用、期間が大きい
    • 個人でゲームを制作して、販売する...というのは困難
  • 最近のゲーム制作
    • 小規模なゲームなら少人数で制作できる
    • 配信で販売も容易になった

ゲーム開発現場

  • ファーストパーティ
  • セカンドパーティ
    • ファーストパーティの関連会社
    • 言葉としての限定が曖昧である
  • サードパーティ
    • 上記に当てはまらない、ゲーム機のゲームを販売する会社
    • カプコンコナミ...
  • パブリッシャー
    • パソコンやスマホでのサードパティ
  • デベロッパ
    • ゲームの開発を担当する会社
    • 販売はしない

ゲームができるまで

複数人でゲームを作る場合、どのような分担(職種)があるだろう?

  • テスター、バグチェック / モニター / デバッガー
  • プランナー(企画、シナリオ、権利・法律関係)
    • ゲームの企画、仕様など担当
  • ハード制作
  • ソフト制作
  • 音楽制作(サウンドクリエイター、音楽、効果音、声優)
    • コンポーザー
      • 音楽担当
  • プロデューサー
    • 作品全体のリーダー的存在
  • ディレクター
    • 開発のリーダー
  • デザイナー(グラフィック、モデラーモーションアクター)
    • グラフィッカー
      • ビジュアル面の担当
  • プログラマー
  • 営業
  • マーケティング

ゲームデザインとゲームが出来るまで

  • ①プラン
    • ゲームの概要を考える
  • ②企画書
    • ゲームの面白さを伝えるための資料を作成する
  • ③プロット
    • ゲーム、シナリオの流れをまとめたものを作成する
  • ④仕様書
    • 各開発担当が制作できるように細かな内容を記載する
  • ⑤制作
    • グラフィック、サウンド、プログラムなど、各担当が制作する
  • ⑥テスト
    • ゲームが正常に動作するかテスト、デバッグを行う
  • (番外)プロモーション
    • ゲームの面白さが伝わるようにPRする

クラッチ導入

クラッチとは

Scratch財団がマサチューセッツ工科大学メディアラボ ライフロングキンダーガーデングループ(MIT Media Lab Lifelong Kindergarten Group)と共同開発する、8〜16才のユーザーをメインターゲットにすえた無料の教育プログラミング言語及びその開発環境である。

  • クラッチ導入
  • アカウント登録

  • x, y座標への移動

  • 背景の変更
  • スプライトの変更
    • スプライトの大きさ
    • スプライトの名前
  • ファイルの保存
  • スプライト2体以上での作成
  • コスチュームを使ったアニメーション
    • 次のコスチュームにする、で繰り返し処理
      • 向きで操作する
  • コスチュームの複製
    • 編集

確認テスト

  • ゲーム制作の途中段階で作成する、「ゲームの面白さを伝えるための資料」に当たるもの
    • 企画書
  • プロット
    • 筋立て、構成のこと

2022.04.14 PythonProgrammingA 授業内容

この記事は職業訓練校の受業の内容の要点をまとめたものです。 職業訓練校を検討されている方が居たら参考にしてください。

PythonProgrammingA

作業環境の構築

  • Visual Stadio Codeのインストール
  • Python3.10.4のインストール
    • Python3.10(安定版の最新)の利用
    • インストール時、path~をチェック(システム権限関係?)
  • ターミナルでpythonでエンター
  • 拡張機能
    • Python Extension Pack
    • Japanese Language ~

ガイダンス

学期の目標

  • プログラムの仕組みを理解できる。
  • 数値計算をプログラムで記述することができる。
  • 外部ライブラリを利用することができる。

年度の目標

  • Python言語を使用して「自分が解決したい課題を解決できる」

教材

Pythonドキュメントサイト(内のチュートリアル)

Pythonプログラミングをやってみよう

  • ターミナルでpythonでエンター
    • 終了はquit()
  • インタラクティブモード
    • 対話
  • 全角スペースに気を付けよう
  • 四則演算
    • // -> 割った小数点を切り捨て
    • 変数を使った四則演算
    • 「_」アンダースコア -> 一つ前の計算結果
  • 文字列の計算
    • [] -> 配列から取り出す
      • month = 'April'
      • month[2] -> r
    • len -> 文字列の長さを表示する

XML外部実体参照

書籍を読んで

www.amazon.co.jp

こちらの書籍を読んでWebアプリケーションを作る際に重要な要点を自分用としてアウトプットします。

XML外部実体参照(XXE)

概要

XMLには外部実体参照という機能があり、外部ファイルの内容を取り込むことができる。 XMLデータを外部から受け取るプログラムは、外部実体参照の形でWebサーバ内部のファイルなどを不正に読み取られる可能性がある。 この攻撃をXML実体参照攻撃と呼び、XML外部実体参照ができてしまう脆弱性XML外部実体参照脆弱性と呼ぶ。 ※XML外部実体参照という用語は長いので、XXE(XML External Entity)と省略する。

脆弱性が生まれる原因

XMLの外部実体参照を使うとXML中に外部のファイルを流し込むことが出来ることはXMLが元々持つ機能。 従って、XXEはXMLの機能を悪用するものであり、プログラムにコーディング上のバグがあるというものではない。

対策

XXEはXMLの機能を悪用するものなので、外部実体参照を禁止する指定を行うことが基本となる。 PHPの場合以下のいずれかの方法でXXE対策が可能。

XMLの代わりにJSONを用いる

外部から与えられた信頼できないXMLを解析しないことでXXE対策となる。 しかし、XMLは外部とのデータ交換に用いられることも多いため、単にXMLの受け取りをやめるというのは難しい場合がある。 このため、外部とのデータ交換には、XMLの代わりにJSONを用いる方が安全である。 JSONの場合、安全でないデシリアライゼーションやXXEなどの問題は通常発生しない。 ただし、SOAPのようにプロトコルXMLを採用している場合には、XMLをやめるわけにはいかないので、以下の外部実体参照を禁止する方法で対策する。

libxml2のバージョン2.9以降を用いる

PHPXML処理には、内部でlibxml2というライブラリが用いられている。 libxml2の2.9以降では、デフォルトで外部実体参照を停止する設定となっており、XXEに対して脆弱ではない。 ただし、PHP側で外部実体参照を許可する設定にしている場合は例外となる。 ※メジャーなLinuxディストリビューションに関して、サポート継続中、かつ最新のパッチを適用していれば、libxml2側で外部実体参照を停止していることが確認されている。

libxml_disable_entity_loader(true)を呼び出す

PHPにはlibxml_disable_entity_loaderという関数が用意(PHP5.2.11以降)されていて、これを呼び出すことにより、libxml2やPHP側の処理内容に関わらず外部実体参照が禁止される。

まとめ

XXEが最初に報告されたのが2002年なので、かなり古くから知られている問題だが、これまで大きく取り上げられることはなかった。 しかし、OWASP TOP10の2017年版に4番目のリスクとしてランクインしたことにより大きな注目を集めることになる。 PHPを使う限り、libxml2のバージョンアップあるいはパッチ適用に対策されるが、Java言語の場合アプリケーション側での対策が必要となるため、PHP以上に注意が必要である。

安全でないデシリアライゼーション

書籍を読んで

www.amazon.co.jp

こちらの書籍を読んでWebアプリケーションを作る際に重要な要点を自分用としてアウトプットします。

安全でないデシリアライゼーション

概要

  • リアライゼーション
    • アプリケーション内部の構造を持ったデータを保存・伝送する目的でバイト列に変換すること
  • デシリアライゼーション
  • 情報漏洩
  • サイト改ざん
  • 不正な機能実行
  • 他サイトへの攻撃(踏み台)
  • 暗号通貨の採掘(マイニング)

脆弱性が生まれる原因

  • 外部からの信頼できない入力データを元にデシリアライズ処理を行うと、意図しないオブジェクトがメモリ上に生成される
    • オブジェクトはメソッドを持っているので、攻撃者はオブジェクトのプロパティを巧妙に設定することにより、任意のコードを外部から実行出来る場合がある

対策

安全でないデータをデシリアライズすることは基本的に危険であり、避けなければならない 対策としては以下が考えられる - シリアライズ形式ではなくJSON形式によりデータを受け渡す - クッキーやhiddenパラメータではなくセッション変数など書き換えできない形でシリアライズ形式のデータを受け渡す - HMACなどの改ざん検知の仕組みを導入してデータが改ざんされていないことを確認する

evalインジェクション

書籍を読んで

www.amazon.co.jp

こちらの書籍を読んでWebアプリケーションを作る際に重要な要点を自分用としてアウトプットします。

evalインジェクション

概要

構造をもったデータの例として、プログラムのソースコードを用いるケースがある。 最近よく用いられるJSONJavaScriptソースコードの形式を一部切り出したものが起源ですし、その他の言語でも、ソースコード解釈実行するevalと呼ばれる機能や関数があり、各言語のソースコードをデータとして扱うことができる。 evalの利用法に問題がある場合、外部から送り込んだスクリプトを実行される場合がある。 このような攻撃をevalインジェクション攻撃と呼び、そのような攻撃を受ける脆弱性をevalインジェクション脆弱性と呼ぶ evalインジェクションによる影響は以下の通り - 情報漏洩 - サイト改ざん - 不正な機能実行 - 他サイトへの攻撃(踏み台) - 暗号通貨の採掘(マイニング)

脆弱性が生まれる原因

  • evalを用いることがそもそも危険である
  • evalに与えるパラメータのチェックがされていない

対策

eval(同等機能を含む)を使わない

  • シリアライズの目的である場合、以下の選択肢がある
    • implode/explode
      • implode関数は配列を引数としてとり、区切り記号をはさんで文字列にする関数
      • explodeはその逆を行う
      • 単純な配列のシリアライズには対応できる
    • json_encode/json_decode
      • 自由度と安全性のバランスから多くの場合に推奨できる方法
    • serialize/unserialize
      • serializeはさらに自由度が高く、オブジェクトのシリアライズが可能
      • しかし、「安全でないデシリアライゼーション」の原因になるので避けるべき
  • シリアライズ以外の目的でも、evalなどを使わない実装を検討すべき
    • 多くの場合eval相当の機能を使わなくても、同等の処理は実装可能である
    • 例えば、e修飾子つきのpreg_replaceの代わりにpreg_replace_callbackを使うと安全である

      evalの引数に外部からのパラメータを指定しない

      evalを使った場合でも外部からパラメータを指定できなければ攻撃はできない。 ただし、スクリプトの注入経路はHTTPリクエスト経由だけとは限らず、ファイルやデータベース経由で注入できる場合もあるので、そのような注入経路の可能性がある場合は、この対策方法は使えない。

      evalの与える外部からのパラメータを英数字に制限する

      外部から与えるパラメータを英数字に限定できれば、スクリプトの注入に必要な記号文字(セミコロンのほか、コンマ、引用符など多種)が使えなくなるので、スクリプト注入はできなくなる。

まとめ

evalは強力な機能であるがゆえに、脆弱性が混入した場合の影響も甚大である。 世の中にはevalのない言語も多く存在するわけで、極力evalを使わない実装が推奨される。