(Javascript復習)開始114日目〜超初心者、文系、30代のスタート〜
今日学んだこと:
・console.log(“”);←セミコロンで終わり、”or`は必須
・文頭//←読み込まれなくなる
・変数:let 変数名 = 値で定義
※変数は””or’’で囲まない
※プログラミングの=の多くは代入という意味
※letは更新する時つけない
・変数を使うメリット
1.同じ値を繰り返し使える。
2.変更に対応しやすい。
3.値の意味がわかりやすい。
・変数名のルール(ES6の場合)
数字開始、ローマ字、日本語はNG
・定数:const 変数名 = 値で定義
変数は1度代入した値を更新することができましたが、定数は値を更新することはできません。
これにより、予期せぬ更新を防ぐことができる。
テンプレートリテラル
${定数}で文字列の中に定数や変数を含めることができる
文字列全体をバッククォーテーション(`)で囲む
JSの場合、条件分岐では{}の後の;不要
「if(条件1)」
「else if (条件2)」←条件1が誤りのとき
「else」←どちらでもない
「かつ」は「&&」、「または」は「||」
「switch(条件の値){ 処理 }」:値によって処理を分岐させていく
→breakとはswitch文を終了する命令
→defaultはif文のelseに似たようなもの
明日やること:
Pysoneについて学ぶ
感想:
JSの復習を行なったが、前日jQueryを行なっていた為もしくは始まりだからか、すんなりと進んだ。
もくもく会にも参加してみよう。
(Python)開始113日目〜超初心者、文系、30代のスタート〜
本日学んだこと:
「if 条件式 :」
Pythonではコードの見た目(インデント)がそのままプログラムの動作に影響する。
== 等しい、!=等しくない
if文に「else」を組み合わせることで「もし○○ならば☓☓を行う、そうでなければ△△を行う」という条件分岐
複数定義したい場合は「elif」
「もし○○ならばxxを行う、△△ならば▲▲を行う、そうでなければ□□を行う」という処理ができる。
「条件1 and 条件2」、「条件1 or 条件2」
両方成り立つ時(and)、どちらかが成り立つ時(or)
「not 条件式」
条件式が「True」であれば全体が「False」に、「False」であれば「True」
「変数 = input('コンソールに表示したい文字列')」のように使うとコンソールに入力された値が変数に代入
→数値として扱いたい場合には型変換を使って下図のようにint型に変換
明日やること:
Rubyを復習する
感想:
寒気がしたため、本日は軽めで切り上げた。
(Python)開始112日目〜超初心者、文系、30代のスタート〜
本日学んだこと:
・WEBアプリケーション開発や機械学習、統計処理
・GoogleやFacebookなどのトップIT企業では開発言語
※数値は””で囲まなくて良い。
→計算も反映される。
・%:余り表示する
※print()で変数の出力、計算式も出力される。
「変数名 = 新しい値」
変数の値を更新
例)変数名 = 2000
変数名 = 変数名 + 2000
print = 変数名→4000と出力される。
データ型:文字列型、数値型に別れる値の修理
文字列型を数値型に変換したい場合には「int」
数値型を文字列型に変換するには「str」
→これらを型変換という
明日やること:
Python移動中に行う。
感想:
新しい言語を学んでいるが、 Pythonはrubyと似ている感覚がある。
それがわかるだけでも良いかもしれないが、ごちゃごちゃになりそうな感じもする。
これと同時にRubyの復習も必要かもしれないと感じた。
開始109日目〜超初心者、文系、30代のスタート〜
本日学んだこと:
基礎カリキュラムで記述されていた、
BEMの記述方法は、hamlだろうが、SCSSだろうが、書き方としては同じであり、<></>なのか.なのかの違い程度のイメージで良い。<br>で記述した文字の改行。
h1〜h6:見出しタグ、P要素:テキストの段落
明日やること:
確認テストの復習、最終課題部分を読む
感想:
HTMLに関して、予め紙に書き出して、ヘッダー、フッダー、body要素、それぞれどうやって作成していくか、事前計画がかなり大事であることを改めて感じると共に、スピードアップには欠かせないことを痛感した。
そうすることで、まずは何をやって、次はどうするべきで、最後に何をするべきか、知識はもちろん、そういった計画性も身に着けることが今後必要であることを身に染みた。
開始108日目〜超初心者、文系、30代のスタート〜 学んだこと追記4
オブジェクト指向とは、複数のオブジェクトを組み合わせてプログラムを構築する考え方。
一つのテーマを持った集まり。
目的:開発者同士の円滑なコミュニケーションのために必要。
オブジェクト指向のメリット
・将来発生する面倒を避けることができる。
※一朝一夕で身につけることはできません。この力を早く身につけられるように意識しながら日々の開発を進めていきましょう。
ゲッターとは、あるクラスのインスタンスのインスタンス変数の値を返すだけのメソッド
インスタンスは自身のインスタンス変数titleやインスタンス変数feeの値を返す。
例)movieクラスのインスタンス.titleなどとすることで、それぞれの値を取り出せるようなる。
requireは、あるファイルから他のファイルの記述内容を参照するためのメソッド。
インスタンス変数の値を更新するためのインスタンスメソッドのことを、特別にセッター。
インスタンスメソッドの中でselfと書くと、そのインスタンスメソッドを使っているインスタンス自身を参照できます。
ポイント:この実装はどのクラスが持つべきかということとどんな名前にするのかということ。
1.どのクラスが持つべきか、2.どんな名前にすべきか
attr_accessor:ゲッター、セッターを簡単に定義できるメソッド
例)class Dog
attr_accessor :name, :type, :age
end
コード見通が悪くなる原因
・それぞれのクラスにその責務外の仕事をさせてしまうこと。
ビュー:
部分テンプレートとして切り出して使用する時の注意点は、「部分テンプレート内でインスタンス変数を使用しない」こと。
ビュー編:
- app/controllers/concernsにファイルを追加し、必要箇所で読み込ませる
- 親コントローラにメソッドを定義する
などの方法でコントローラの記述をうまく共通化すること
コントローラー編:
コントローラのコード量が多くなっている場合、本来モデルで行うべき処理がコントローラに書かれている可能性が高い。
モデル編:
様々な処理はモデルに集約されていくために、特にモデルは肥大化し易い傾向。
Decorator(デコレーター):
ビューとモデルの中間に位置し、モデルやビューなどに実装されやすい表示ロジックやフォーマットなどの責務を引き受けるクラス
※gemの導入の仕方や細かい使い方に関してはgithubなどを参考
Validator(バリデーション):
データの整合性を保つために、データを検証する機能のこと
Callback(コールバック):
validationの直前に実行されるbefore_validationであったり、saveの直後に実行されるafter_saveなど様々なタイミングで実行される。
開始108日目〜超初心者、文系、30代のスタート〜 学んだこと追記3
情報セキュリティとは、Webサービスにおいてのセキュリティ(安全保障)です。情報セキュリティにおける理想は、「不正なアクセスや情報の漏洩を防ぎつつ、権限がある人は便利に利用できる」状態を維持することです。これを分解し言い換え、「機密性」「完全性」「可用性」の3つの要素を維持することを目標にします。
・機密性 権限を持たない人が情報資産を見たり使用できないようにすること
・完全性 権限を持たない人が情報を書き換えたり消したりできないようにすること
・可用性 権限を持つ人がいつでも利用したいときに利用できるようにすること
アプリケーション全体のセキュリティに弱点を作り出すコンピュータソフトウェアの欠陥や仕様上の問題点のことを脆弱性(ぜいじゃくせい)。
アプリケーション上で悪意のある者に攻撃を仕掛けられる際の弱点。
被害:
- 個人情報を勝手に閲覧される(機密性侵害)
- Webページの内容が改ざんされる(完全性侵害)
- Webページ自体が利用不能になる(可用性侵害)
HTTPとはWebブラウザとWebサーバの間でHTMLや画像ファイルなどのコンテンツの送受信に用いられる通信プロトコルです。
複数のユーザが滞りなく信号やデータ、情報を相互に伝送できるよう、あらかじめ決められた約束事や手順の集合
ステータスコードとはHTTP通信のレスポンスメッセージのステータスライン中にある3桁の数字で、クライアントからのリクエストに対して、サーバからの返答はどのような状態かを提示してくれるのものになります。Webページが正常に表示されないような状態の時にどこに原因があるのかがわかるようになるため対策を取りやすい。
セッション
複数回に渡るリクエストにおいて、クライアントを特定するための仕組み
クッキー(cookie)
クライアント側のブラウザに保持することができる情報のことです。
ステートレスとはサーバが現在の状態を保持せず、ユーザの入力の内容のみによって出力が決定される状態のこと。
ページが遷移してもユーザの情報や購入しようとしている商品の情報を保持している必要があり、これを保持するために用いられているのがセッション、HTTP通信のセッションを管理するために作られた仕組みをクッキー(cookie)といいます。このような通信をステートフル通信といいます。
HTML生成の実装に問題があると、外部よりスクリプトを埋め込まれクッキーを盗まれたり、JavaScriptによる攻撃を受けてしまうおそれがある。
一般的な対策方法:
HTMLを生成する際に意味を持つ「"」や「<」を文字参照によってエスケープすることが基本
rawメソッド
SQLインジェクション
アプリケーションのSQLの呼び出し方においてセキュリティ上の不備を意図的に利用し、データベースシステムを不正に操作する攻撃方法。
- データベース内のすべての情報が外部から盗まれる
- データベースの内容が書き換えられる
- IDとパスワードを用いずにログインされる(不正ログイン)
- その他、データベースサーバー上のファイルの読み出し、書き込み、プログラムの実行などを行われる
SQLインジェクション脆弱性を解消するためには、SQL文を組み立て実行される際にSQL文を変更されることを防ぐこと。
find_by_sql
SQL文を直接書いて、レコードを取得するメソッド。
CSRF:
Webサイトにスクリプトや自動転送(HTTPリダイレクト)を仕込むことによって、利用者に意図せず別のWebサイト上で何らかの操作(掲示板への書き込みや銀行口座への送金など)を行わせる攻撃手法。
- 利用者のアカウントによる物品の購入
- 利用者の退会処理
- 利用者のアカウントによる掲示板への書き込み
- 利用者のパスワードやメールアドレスが変更
攻撃例:
- 利用者がexample.jpにログインしている
- 攻撃者は罠を作成
- 利用者が罠を閲覧する
- 罠のJavaScriptによる、被害者のブラウザ上で攻撃対象サイトに対し、新しいパスワードabcdefがPOSTメソッドにより送信される
- パスワードが変更される
一般的な対策方法
CSRF攻撃を防ぐには、「重要な処理」に対するリクエストが利用者の意図によるものかどうかを確認することが必要。
正規リクエストかどうかの判断:
- 秘密情報の埋め込み
- パスワードの再入力
- Refererのチェック
セッションハイジャックとは名前の通り、なんらかの方法を用いて正規利用者ではないものが他人のセッションIDを乗っ取る攻撃手法。
攻撃手法:
- セッションIDの推測
- セッションIDの盗み出し
- セッションIDの強制
問題があるセッションID
- ユーザIDやメールアドレス
- リモートIPアドレス
- 日時
- 乱数
SSLとはSecure Socket Layerの略で、インターネット上の通信を暗号化してくれる技術です。これにより、第三者からの情報の盗聴や改ざんを防ぐことができる。