2022.04.12 Computer System 授業内容
この記事は職業訓練校の受業の内容の要点をまとめたものです。 職業訓練校を検討されている方が居たら参考にしてください。 [:contents]
Computer System
・基本情報技術者試験ドットコム https://www.fe-siken.com/ ・ITパスポート試験ドットコム https://www.itpassportsiken.com/
基本情報合格教本
- 勉強法
- こういう勉強法もあり
- 試験はこう出る
- 出題分析
- を攻める
- 参照ページを見ながら勉強する方法がおすすめ
- 計算が苦手の場合
- 501p~ 計算問題の実践攻略
- インプットとアウトプットのバランスが大事
- こういう勉強法もあり
- 章末まとめ問題
- 電子媒体は最新じゃないのでドットコムサイトで補強したほうが良い
- 解説もドットコムのほうが優しい
- 苦手分野を克服すれば合格の可能性は上がる!
- 苦手分野にフォーカスして攻めていくのもあり
プログラミング的思考とは
- 自分が意図する一連の活動を実現するためには、どんな動きの組合せが必要かを論理的に考える力のことです。 アルゴリズムは、組み立てた動きをなんらかの形にしたもの
アルゴリズム
- 知識レベルで解けない設問もありますが、トータルでみると その時点の、その人の『考える力』が、どれぐらい養われているかを図るために出題される
データ構造とは
- コンピュータ上にデータを格納する論理構造のこと
- 様々なデータ構造が存在するが、用途に応じてどれを選ぶかが重要
アルゴリズムと流れ図
流れ図
- ※フローチャートのこと
-
- 処理の手順を表したもの
- 順番に処理が行われるように1つ1つ必要な処理を記述していく
- 論理が正しく行われているかしっかりと検証する必要がある
- 表現には、流れ図や疑似言語などが使われる
- 処理の手順を表したもの
フローチャートと疑似言語
-
- ボックスと矢印を用いて表現する
- プログラムの開始と終了の間に処理を記述し、流れを表現する
疑似言語
- 午後試験で使われる(ITパスポートで使われる)
- 流れ
- プログラムの名前を入れる
- 型付け
- 開始と終了は書かない
- 下に行ったら終わり
- 流れ
- テキストベースで処理の流れを表現する
- 「・」を先頭に付ける
- インデントを揃える(分岐があった場合を考える)
- 試験用に作られた言語
- 分岐の書き方
- プログラム名称(駅)の下に条件式(条件式: 本屋に用事がある?)を入れる
- 条件に合う場合(YES)の処理を下に書く
- 真ん中に線を入れて、上下で分岐を分け、下側にNOの場合の処理を書く
- YES, NOの処理の共通項目で分岐を合体させる
- 最終的なゴールを記述する
- 午後試験で使われる(ITパスポートで使われる)
フローチャートと疑似言語
- 考え方は同じ
- 表現の仕方が違う
- フローチャート
- 分かりやすい
- 表現が長くなりやすい
- 疑似言語
- 分かりにくい(視覚的)
- 字列だけ書くため短く表現できる
- フローチャート
順次処理 / 分岐処理
- 順次処理
- 順番に処理を行っていく
- 分岐処理
- 特定の条件に応じて処理を分岐していく
- if文
- 条件に応じて処理を行った結果、行わない処理がある場合もある
- 順次処理
アルゴリズムの基本と流れ図
アルゴリズムの基本
- 順次構造
- 上から下へと順番に処理が行われる
- 選択構造
- 分岐
- 条件によって次に行う処理を選択する
- 繰り返し構造
- 処理を何回か繰り返し行う
- あるいは条件がクリアするまで繰り返す
- 同じ処理を繰り返す
- 処理を何回か繰り返し行う
- 順次構造
流れ図
アルゴリズム
線形探索
ハッシュ探索
整列のアルゴリズム
- ソートと付く
整列とは?どうやって探す?
- 並び替えしてあるほうが速いよね
- どうやって並び替えするの?
- PCのメモリ空間で処理を行う
- データの入れ替え(交換)が必要
- 例: AとBのデータを交換する場合、一時的に置く場所が必要
- = 一時的な格納領域が必要 --> TMPと付けられる(慣習)
- [A <--> B を交換する場合] + [□(データを交換する為の領域)]
- メモリ空間では切り取りは出来ない、コピペのみ
- どうやって並び替えするの?
データの管理とファイルシステム
ディレクトリ管理
ファイルの概念
パスの指定
PCのファイルシステムの役割
- アプリケーションプログラムが,ハードディスクやDVDなど記憶媒体の違いを意識しなくてもファイルにアクセスできるように,統一したインタフェースを提供する。
IoTとは?
2022.04.11 Data Science 受業内容
この記事は職業訓練校の受業の内容の要点をまとめたものです。 職業訓練校を検討されている方が居たら参考にしてください。 [:contents]
データサイエンス
※大事 =SUMPRODUCT Excelを使って数学を理解する -> 数学を好きになろう
理解のゴール
- データサイエンス, AIの概要を知る
- 学習する上で大事なこと
覚えておこう
=SUMPRODUCT
- Excelと言ったらsumproduct
- CNN
- CNNを理解することが重要
Operations Research
アランチューリング
- アランチューリング
- イミテーション・ゲーム(映画の題材)
- ユダヤ人
- 50pondの紙幣
- ドイツがエニグマで暗号を送っていたものを解読する
- AIの父
- リンゴをかじって亡くなる
- appleのロゴの意味
- アダムとイブの禁じられたリンゴにちなんで、人類の進歩を表しているとされる
- チューリングとの関連は...?
コンピュータのノーベル賞
☆☆☆ジョン・マッカシー
AI
- 頭の中の脳細胞をまねたもの
- 機械でさせると頭の中がわかるという逆のこともわかる
- ニューロン
- 数学は大した事ないという捉え方をしよう
データサイエンスとは
具体的に理解したい 覚えるには確かなフレーズ、書き方がいい!! ネット情報で不確かな情報だと定着しない(理解できない) - データサイエンス 1. [みんなが既に知っているデータ] 1. 統計学の手法を用いる 1. 価値ある情報・データにする 2. [組織データによる最適化] 1. OR(Operations Research)手法を用いる 1. 価値ある情報・データにする 3. [Big Date, 画像データ, 音声データ他] 1. BigDateの代表例は画像データ 1. AI手法を用いる 1. 価値ある情報・データにする 4. 1~3は全て同じ大枠の中にあるもの 5. ベースになる考え方はあったが、ハードウェアが追いついていなかった 社会に溢れているデータから、有益・価値のある情報を引き出す学問 (データ分析手法を学ぶこと!)
Big Dataとは?
- 大量(膨大)データとサーバー・データベース間の通信頻度が高速
- Volume: 大量(膨大)
- Velocity: 高速(速さ)
- 速さの事だが、そもそも高速である必要がある
- Variety: 多様性(画像,音声,など) --> 価値(Value)のある情報・データの提供
- Big Dataとは?
- 3つのVの特徴がある情報・データのこと
ExcelでAIの勉強が出来る
Excelでわかる機械学習 超入門 -AIのモデルとアルゴリズムがわかる - 畳み込みニューラルネットワークがわかる
AIとは
- 従来のコンピュータ
- 数値計算が得意
- データとルールを入力し、コンピュータが答えを出力する
- 従来のプログラミングでは困難なこと
- 例: 画像を見て、グーチョキパーのどれかを判断すること
- AI(機械学習)
- データと答えをAIに入力するとルールが出力される
- 逆転の発想
- ただし、ルールを活用する
- 予測してくれる
- データと答えをAIに入力するとルールが出力される
TensorFlow
- TensorFlowの使用
- kerasが数学部分をHelpしてくれる
- 配列x, y
- epochs = 回数を指定する
- データと答えを入れて計算させる 計算式から出される答えがAIによって確実な数値が出されるわけではない ※限りなく近い答えが出る(答え19だった18.9848のような数値)
プログラミングを初めてやる上で大事なこと
- 環境構築でつまづかない
- 0からやろうとしない
- 最初は目に見える形で学び、分からないところを理解しようとしよう
- 分からなくて良い
- 分からない事をメモか何かで残しておく
- 何回もやることが大事
本講義を受けて、まとめ
- 何事も前向きに捉える
- 好きな事をやれ!
- 少し好きなら一生懸命やって好きを仕事に出来るようになれ!
入力処理とセキュリティ
書籍を読んで
こちらの書籍を読んでWebアプリケーションを作る際に重要な要点を自分用としてアウトプットします。
入力処理とセキュリティ
アプリケーショの入り口、入力処理
対策
- 入力値検証はアプリケーション仕様に基づいて行う
- 文字エンコーディンの検証
- 制御文字を含む文字種の検証
- 文字数の検証
- 数値の最小値・最大値の検証
実施
- 設計段階で各パラメータの文字種および最大文字数、最小値・最大値を仕様として決める
- 設計段階で入力値検証の実装方針を決める
- 開発段階では仕様に従い入力値検証を実装する
PDFのFormCalcによるコンテンツハイジャック
書籍を読んで
こちらの書籍を読んでWebアプリケーションを作る際に重要な要点を自分用としてアウトプットします。
PDFのFormCalcによるコンテンツハイジャック
PDFはFormCalcとよばれるスクリプト言語が仕様でき、PDFドキュメントにFormCalcスクリプトを埋め込むことが出来る。
Adobe Acrobat Readerに実装されたFormCalcにはURL関数という機能があり、HTTPリクエストを呼び出し、結果を受け取ることが出来る。
このFormCalcのURL関数を用いた仕掛けを組み込んだPDFファイルをアップロードすることにより、正規ユーザに成りすましを行う攻撃手段が考案されている
脆弱性が生まれる原因
問題としては、Adobe Acrobat Readerのセキュリティ上好ましくない仕様を悪用されることにある
従って、Acrobat Readerの仕様が見直される事が本筋だが、Webアプリケーション側で対応を取らざるを得ないのが現状である
対策
ブラウザのAcrobat ReaderプラグインでPDFデータを開いてしまうと、PDFファイル内のスクリプト実行を止める手段はWebサイト側には用意されていない。
このため、以下の両方を実施することが対策になる
- PDFファイルはブラウザ内で開かずダウンロードを強制する
- PDFをobject要素やembed要素では開けない仕組みを実装する
ファイルアップロードにまつわる問題
書籍を読んで
こちらの書籍を読んでWebアプリケーションを作る際に重要な要点を自分用としてアウトプットします。
ファイルアップロードにまつわる問題
Webアプリケーションには、画像やPDFなどのファイルをアップロードして公開する機能(アップローダ)を備えるものがある。
利用者がファイルをアップロードする機能や、利用者がアップロードしたファイルを別の利用者がダウンロード出来る機能に発生しがちな脆弱性がある。
アップロードファイルによるサーバ側スクリプト実行
外部から送り込んだスクリプトが実行されると、以下のような影響がありえる
- Webサーバ内のファイルの閲覧・改ざん・削除
- 外部へのメールの送信
- 別のサーバへの攻撃(踏み台と呼ぶ)
- サーバ上での暗号通貨の採掘(マイニング)
脆弱性が生まれる原因
アップロードファイルをスクリプトとして実行可能な脆弱性が生まれる条件は、以下の両方に該当すること
対策
脆弱性が生まれる原因の2点のうち、どちらか一方の条件をつぶせば対策になるが、拡張子の制限だけでは対策抜けが生じる可能性がある
このため、ファイルを公開ディレクトリに保存させない方法が良い
アップロードされたファイルを公開ディレクトリに保存しない場合、このファイルはスクリプト経由でダウンロードする
アップロードファイルによるサーバ側スクリプト実行を防止するには、以下の2点の両方、あるいはいずれかを実施する
ファイルダウンロードによるXSS
アップロードしたファイルを利用者がダウンロードする際に、ブラウザがファイルタイプを誤認する場合がある。
たとえば、アプリケーションがPDFファイルを想定しているにもかかわらず、PDFデータ中にHTMLタグが含まれていると、条件によってはブラウザがHTMLファイルとして認識してしまい、PDFファイルに埋め込まれたJavascriptを実行する場合がある
これを、ファイルダウンロードによるクロサイト・スクリプティング(XSS)と呼ぶ。
脆弱性が生まれる原因
Content-Typeの間違った指定が原因
Content-Typeの指定が間違っていると、ブラウザがコンテンツをHTMLと解釈し、コンテンツ中のJavaScriptが実行されてしまう可能性がある
対策
ファイルのアップロード時とダウンロード時に以下の対策を実施する
- ファイルのアップロード時
- 拡張子が許可されたものかをチェックする
- ファイルのダウンロード時
- Content-Typeを正しく設定する(必須)
- PDF形式のContent-Typeを「application/pdf」と正しく設定すれば、脆弱性はなくなる
- Content-Typeを正しく指定することは、全てのブラウザに必要な処理
- レスポンスヘッダX-Content-Type-Options: nosniffを指定する(必須)
- 必要に応じてContent-Dispositionヘッダを設定する
- PDFを扱う場合は、「PDFのFormCalcによるコンテンツハイジャック」の対策を実施する(別途ページ参照)
- Content-Typeを正しく設定する(必須)
その他の対策
上記までのXSS対策は、脆弱性を防止するための必要最低限のチェックのみのため、Webアプリケーションの仕様策定時に、以下のようなチェックを行うかどうか検討すると良い
OSコマンド呼び出しの際に発生する脆弱性
書籍を読んで
こちらの書籍を読んでWebアプリケーションを作る際に重要な要点を自分用としてアウトプットします。
OSコマンド呼び出しの際に発生する脆弱性
Webアプリケーションの開発に用いる言語の多くはシェル経由でOSコマンドの実行が可能。シェル経由でOSコマンドを実行する場合や、開発に用いた機能が内部的にシェルを用いて実装されている場合、意図しないOSコマンドまで実行可能になる場合がある
この現象をOSコマンド・インジェクションと呼ぶ
OSコマンド・インジェクション
脆弱性が生まれる原因
- シェル経由でOSコマンドを呼び出す際に、シェルのメタ文字がエスケープされていない場合
- シェル機能を呼び出せる関数を使用している場合
OSコマンド・インジェクション脆弱性が生まれる条件は、以下の3つをすべて満たしている場合
- シェルを呼び出す機能のある関数(system, openなど)を利用している
- シェル呼び出しの機能のある関数にパラメータを渡している
- パラメータ内に含まれるシェルのメタ文字をエスケープしていない
対策
- OSコマンド呼び出しを使わない実装方法を選択する
- 設計フェーズで対策方針を決定する
- シェル呼び出し機能のある関数の利用を避ける
- シェルを経由しない関数の使用
- 外部から入力された文字列をコマンドラインのパラメータに渡さない
- OSコマンドに渡すパラメータを安全な関数によりエスケープする
保険的対策
ファイルアクセスにまつわる問題
書籍を読んで
こちらの書籍を読んでWebアプリケーションを作る際に重要な要点を自分用としてアウトプットします。
ファイルアクセスにまつわる問題
Webアプリケーションは様々な形でファイルを使うが、そのファイルを取り扱う際に気をつけてなくてはいけない脆弱性がある
ディレクトリ・トラバーサル
外部からパラメータの形でサーバ上のファイル名を指定できるWebアプリケーションでは、ファイル名に対するチェックが不十分であるとアプリケーションの意図しないファイルに対して、閲覧や改ざん、削除が出来る場合がある
脆弱性が生まれる原因
「異なるディレクトリを指定することができる」ことに対する考慮が必要
上記の3条件を満たさないとディレクトリ・トラバーサル脆弱性にはならない
対策
- 外部からファイル名を指定できる仕様を避ける
- ファイル名を固定にする
- ファイル名をセッション変数に保持する
- ファイル名を直接指定するのではなく、番号などで間接的に指定する
- ファイル名にディレクトリ名が含まれないようにする
- ディレクトリを示す記号文字は、「/, \, :」などOSにより異なるので、OSによる違いを考慮したライブラリを用いるべき
- ファイル名を英数字に限定する
最善策は、ファイル名を外部から指定しないこと
設計の段階で、外部からファイル名を渡さない仕様の検討が推奨
意図しないファイル公開
外部から閲覧されると困るファイルをWebサーバの公開ディレクトリに配置している場合、このファイルに対するURLが分かると秘密ファイルの閲覧が可能になってしまう
意図しないファイル公開による影響は
- 重要情報の漏洩
脆弱性が生まれる原因
非公開のファイルを公開ディレクトリに置いた事で、意図しないファイル公開が起こる
- 公開ディレクトリに置かれたファイルが外部から閲覧できる条件
- ファイルが公開ディレクトリに置かれている
- ファイルに対するURLを知る手段がある
- ファイルに対するアクセス制限が掛かっていない
- ファイルに対するURLを知る手段
対策
根本的対策は、非公開ファイルを公開ディレクトリに置かないこと
そのために、以下が推奨される
保険的対策
ディレクトリ・リスティングを無効にする