よく忘れてしまうのでメモ。
CドライブからDドライブに切り替えるときは
D:
これでOK。
育児*プログラミング
よく忘れてしまうのでメモ。
CドライブからDドライブに切り替えるときは
D:
これでOK。
APIキーを直書きではなく環境変数で呼び出して使いたい・・・と思い、実装しました。
https://maku77.github.io/nodejs/env/dotenv.html
参考にしたのはこちらのサイト。
npmに「dotenv」というパッケージがあるらしく、こちらをまずはインストール。
npm install dotenv --save
.envファイルを作成し、環境変数を設定。
KEY1=XXXXXXXXXXX KEY2=YYYYYYYY
最初は”XXXXXXXX”ってクォーテーションマークで囲っていたけど、不要みたい。
jsファイルでdotenvを参照させるため、こちらを追記。
require("dotenv").config();
あとはrequireを追記したjsファイル内で
process.env.KEY1
のように書いてやれば、設定したキーを参照できる。
ファイル構造はこんな感じ。
sample-app
├─app.js
└─.env
最後に、Git管理するなら.envファイルはコミットしないよう気をつける必要が。
なので.gitignoreファイルに
.env
と追記を。
どんなWebサイトにもサイバー攻撃は行われている。
・・・という話は聞いたことがありましたが、いざ自分のサイトにも行われているのを目の当たりにして改めてセキュリティの大切さを実感しました。
というのもSiteGuardを導入してたった3分程度したところで、知らないIPアドレスからのトラステッド・シグネチャが検出されました。
実際何をされたのかというと、サイトの脆弱性を確認されたらしい。。。
どうやって確認するのかというと、WebからShellコマンドを動かせるWebshellが使えるのかどうか確認しているみたい。
具体的にはURLの「?」以降にある「a=fetch&content・・・」がWebshellで実行しようとしたコマンドのよう。
調べても詳しく何を要求するコマンドなのか出てこなかったので、これは推測だけど恐らく「”HelloThinkCMF”のmd5ハッシュ値を返信してexitしてね」という内容だと思う。
ちなみに、たった2日で同じIPアドレスから4回も同じアクセスがありました。
いや怖すぎだろ!!
調べるとロシアのIPアドレスらしく、他にも被害に遭われている方の報告が3000件近くありました。
(こういうのもわかるなんて迷惑電話みたい)
今日はこの件を調べて一日が終わってしまった・・・OTL
だけどセキュリティに関して調べるのは有益な一日、とも言えるかな。。。
明日こそはコーディングしよう。
WAFを入れていなかったので、さくらVPSの利用者は無料で利用できるSiteGuard Liteを導入した。
いつもどおり、さくらのVPS講座を参考にして導入。
https://knowledge.sakura.ad.jp/12348/
WAFってなんぞや?
という方いましたら、こちらも上のサイトに説明が書いてあるので覗いてください。
要するに、様々なサイバー攻撃を防いでくれるファイアウォールの一種らしいです。
ファイアウォールなら既に「firewalld」を適用済みですが、WAFを入れることによって「firewalld」では防ぎきれないサイバー攻撃にも対応してくれるとのこと。
SiteGuard Liteの導入は手間がかかりそう・・・と思って後回しにしてしまっていましたが、上のリンク先を参考にするとサクッと導入できました。
(なぜ後回しにしたんだ、私)
基本的に手順通りに進んだんですが、一箇所だけちょっと躓いたところが。
どこかというと、
./setup.sh
を実行した後、ポート9443のSiteGuard管理画面を開けるはずが開けない!
さくらVPSのコントロールパネルからパケットフィルタ設定でポート9443を開放してみたけど、それでも管理画面が開けず。
他にもブラウザのキャッシュを消してみたりなどしてもうまくいかず・・・。
結局、2回ほど
./setup.sh
のコマンドを実行し直したところで、アクセスできるようになりました。
原因はわからないけれど、パケットフィルタ設定を変更してから反映されるまで時間がかかったとかなのかな?
・・・と予想。(予想なので確信ではない)
手順にあるXSS攻撃をブロックしているかの確認を行った後も、リンク先内にある「さくらのナレッジ」全3回を参考にしてSiteGuardの設定を行いました。
更にセキュリティを高めようとしたらまだまだすることはあるんだろうけど、とりあえずはサイトに書いてあった設定だけ。
SiteGuardを導入してからすぐに、知らないIPアドレスから攻撃されたようで検出ログに記録が・・・。
この辺はまた別記事としてまとめていきたいと思います。
Gitのコマンドをいつも忘れるので、残しておく。
https://qiita.com/kohga/items/dccf135b0af395f69144
ここのサイトに色々なコマンドが載っていて、いつも参考にさせてもらっている。
特によく使うコマンドは抜粋して記載しておく。
git add . git commit -m "コミットメッセージ" git push origin ブランチ名
git fetch
git merge origin/ブランチ名
git pull origin ブランチ名
git branch ブランチ名
git checkout ブランチ名
git branch -a
git log
git status
Webアプリを作り始めたはいいものの、そもそもWebに関する知識がそもそもないな・・・と思って、「Web技術の基本」という本を買って学習することにした。
読み始めて、インターネットとWebの違いについてあまりわかっていなかったなと自覚した。ので、今日はその違いについて書く。
それぞれの目的は、
インターネット → 各地のコンピュータ同士をネットワークで繋げる
Web → インターネット上で文書(データ)をやり取りする
ということらしい。
今まで混同していたけど、こんなにも違うものなんだね。
本にも、インターネットとWebはセットで使われることで爆発的に広まったことにより混同して使われがち、と書かれている。
これから気をつけて使い分けていこう。
Node.jsで立てたhttpのサーバーをhttpsで接続できるようにするため色々調べたところ、
https://kennejs.com/entry/2019/01/19/074529
このサイトを参考にすることで無事SSL化に成功した。
ドメインも取得していたし、SSL証明書もネコでもわかる!さくらのVPS講座 ~第六回「無料SSL証明書 Let’s Encryptを導入しよう」を参考にLet’s Encryptで取得していたので、Node.jsのアプリケーションを修正だけでできた。
const https = require('https'); option = { key: fs.readFileSync('/etc/letsencrypt/live/(独自ドメイン)/privkey.pem'), cert: fs.readFileSync('/etc/letsencrypt/live/(独自ドメイン)/cert.pem'), ca: fs.readFileSync('/etc/letsencrypt/live/(独自ドメイン)/chain.pem') }
まずはこのコードを追記。私の場合「fs」をrequireしていなかったので、この上にさらに
const fs = require('fs');
を追記。
const server = http.createServer(app).listen(3000); let io2 = io.listen(server);
としていたところを
const server = https.createServer(option, app).listen(3000); let io2 = io.listen(server);
に変更。
これで無事にSSL化に成功。
Apacheを動かしている状態だとNode.jsでサーバーを立ててもNode.js側には接続できず、ApacheをストップするとNode.js側に接続できるという状態が発生した。
どうやら共存させるために手順が必要なようだ。
http://note.onichannn.net/archives/2451
上のサイトを参考に、httpd.confのリッスンポートとバーチャルホストのポートを80番以外に避難することで、無事に共存させることができた。
サイト内ではNode.js側はhttp-proxyを導入しているが、この手順は行っていない。
元々ポート80番以外で接続するように設定していたからかな。
サーバーに公開鍵認証でのみログインできるように変更したので、普段使っているFileZillaでの公開鍵認証によるログイン方法を調べることに。
検索したら一番最初にこちらのサイトが出てきた。
https://qiita.com/JeJeNeNo/items/291ef478a6e9adbc4c6d
私はWindowsを使っているので、こちらのサイトを参考に手探りで接続してみた。
この手順で接続は無事完了。
ちなみに鍵を複数登録している場合はどうなるんだろう?と思って、同じ鍵を別名で登録してみると、接続時に新しく登録した鍵が選択されていた。
自分で鍵を選択する方法はあるのかな?
それは必要になったときに調べよう。
無事に接続できてよかった。
昔Qiitaに書いていた記事をそのままこっちにも記載。
転載元:https://qiita.com/Rxxx/items/382854052b14c1764b5b
初めてPythonを触ったので練習として
「入力した数値に該当する数値の月名(英語3字)で表記する」
というものを作成。
以下、作成したコード。
#月名タプル MONTH = ( 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ) #入力 print('数値に該当する月の英語名を表記します') num = int(input('数字を入力してください:')) #出力判定 if 1 <= num <= 12: print(MONTH[num-1]) #月名出力 else: print("その月はありません") #エラー
実行するとこんな感じ。
(入力値:2)
数値に該当する月の英語名を表記します 数字を入力してください:2 Feb
1~12以外の数値を入力するとこう表示される。
(入力値:14)
数値に該当する月の英語名を表記します 数字を入力してください:14 その月はありません
入力を数字のみに制限するのは今後の課題かな。