- 1. 脆弱性
- 1.1. OSコマンドインジェクション
- 1.2. XXS攻撃対策についてNode.js Expressでアプリを構築して実例で理解する
- 1.3. Node.jsでTCP/UDPソケットのIPv4・IPv6両対応は簡単に実装できる
- 1.4. Expressを使ったWebサーバーにTLSの設定を追加してみる。
- 1.5. [守] TypeScriptことはじめ
- 1.6. pm2で–tls-min-v1.0オプションを使う
- 1.7. 【2022年版】MacにNodejsをインストールする方法
- 1.8. もろもろ整備されたサンプルプロジェクト作成の手順のまとめ (github + monorepo + nextjs + commitlint + lint-staged + prettier + eslint + editorconfig)
- 1.9. aws-sdk-mock でモック化できない問題が発生
- 1.10. monorepo環境にnextjsを構築する備忘録
- 1.11. yarnのmonorepo構築の備忘録
- 1.12. Commitメッセージをチェックするcommitlintの設定の備忘録
- 1.13. スクリプトをhook実行させるためのHuskyに関する設定の備忘録
- 1.14. 買ったばかりのM1 MacにNodejsの開発環境をセットアップする手順の備忘録
- 1.15. DynamoDBでデータがあるのに取得できない時に疑うこと
- 1.16. タスクスケジューラーでwsl上のnodeスクリプトを実行する
- 1.17. 【NestJS初心者】管理画面API作ったよって話① 〜環境構築って大変〜
Twitter Spaceの音声をダウンロードする方法
# 環境
デバイス: MacBook Retina 2017
OS: macOS Big Sur バージョン 11.6.1# 必要なソフト
- FFmpeg
- Node.js
- space-dl
# 必要なソフトのインストール
## Homebrewをインストールする
[Homebrew](https://brew.sh/index_ja)のサイトにあるインストールコマンドをターミナルに貼り付け実行する。
インストールスクリプト
“`shell
/bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)”
“`## FFmpegをインストールする
Homebrewを使うことで以下のコマンドで簡単にインストールすることができます。
“`shell
brew install ffmpeg
“`## Node.jsをインストールする
[Node.jsダ
HerokuでMySQLを利用した際に接続が勝手に切れる仕様の修正方法
#HerokuでMySQLを利用した際に接続が勝手に切れる仕様の修正方法
HerokuにNode.js用のアプリをデプロイした際に詰まったので備忘録として投稿します。
※おそらく自分のやり方は結構ごり押しなのでしっかり記事を読んでから使うことをお勧めします。“`Node.js
function intervalFunc() {
connection.query(
‘INSERT INTO users(name) VALUES (“Connection”)’,
(error,results) => {
})
connection.query(
‘select name from users order by id desc limit 1’,
(error,results) => {
if(results[0].name=”Connection”)
connection.query(
‘DELETE FROM users order by id desc limit 1 ‘,
(error,results) => {
req.bodyに変数を用いる方法
#req.bodyに変数を用いる方法
`req.body.○○`の○○の部分に変数を用いようとした際に少し詰まったので、備忘録として投稿します。“`Node.js
//req.bodyの後に入れたい変数を宣言
var bangou
for (let i = 1; i < 10; i++) { //自分の場合はreq.body.bangou_1~10の中身がyesの時だけに処理を通しています。 bangou = "bangou_"+i; //req.body[変数]("."は記述しない)と記述することでreq.bodyの後に変数を用いることが出来ます。 if(req.body[bangou] === "yes"){ console.log("通過"); }else{ continue; } } ``` #結論 以上のコードの7行目のように記述することでreq.bodyの後に変数を用いることが可能でした。
Webの勉強はじめてみた その28 〜脆弱性の対策〜
N予備校「プログラミング入門Webアプリ」を受講しています。
今回は第3章27〜34節です。脆弱性
OS コマンド・インジェクション
– 任意の OS のコマンドを実行できてしまう
SQL インジェクション
– 任意の SQL というデータベースを操作するコマンドを実行できてしまう
ディレクトリ・トラバーサル
– 任意のファイルを閲覧、操作できてしまう
セッションハイジャック
– 利用者のセッションが乗っ取られてしまう
クロスサイト・スクリプティング (XSS)
– スクリプトにより Web サイトの改ざんができてしまう
クロスサイト・リクエストフォージェリ (CSRF)
– 利用者の意図しない操作がされてしまう
HTTP ヘッダインジェクション
– 偽ページの表示などができてしまう
クリックジャッキング
– 利用者の意図しないクリックをしてしまうこれを見ただけでもフレームワークの必要性がわかる。
OSコマンドインジェクション
:::note warn
当人ではなく、Webサービスが実行者になってしまう。
ク
XXS攻撃対策についてNode.js Expressでアプリを構築して実例で理解する
## はじめに
Node.jsのExpressでテンプレートエンジンejsを使って実装するWebアプリを実例に、XXS攻撃を受ける脆弱性がある状態と対策を講じた場合の実装を見ていく事で、XXS攻撃について理解を深めてみようと思う。## XXS(クロスサイト・スクリプティング)攻撃とは?
Webアプリケーションにスクリプト等を埋め込むことが可能な状態になっている=脆弱性がある時に、これを利用されて利用者のブラウザ上で不正なスクリプトが実行されてしまう可能性がある。
そのスクリプト等を埋め込むような攻撃をXXS(クロスサイト・スクリプティング)攻撃という。詳細は以下のサイトを参照。
https://www.ipa.go.jp/security/vuln/websecurity-HTML-1_5.html
以下ではNode.jsのExpressでテンプレートエンジンejsを使った実装を例に、実際に脆弱性がある実装をやってみて、脆弱性がある時どのような事が起きるのか?またそれを防ぐためにどうするのか?をみていく。
見ていく内容としては、IPAのサイトに書かれている対策の一覧に書か
Node.jsでTCP/UDPソケットのIPv4・IPv6両対応は簡単に実装できる
初投稿です。
# 経緯
Node.jsでUDP双方向通信プログラムを書いている上で何故だか急にIPv6対応したくなってきました。しかし、IPv4の方が未だ多く使用されているため、IPv4を捨てることもできず、IPv6と両方対応できるソケットはないか探してみました。
# TL; DR
## UDP
まずソケットをudp4からudp6にします。
“`js
const socket = dgram.createSocket(“udp4”);
“`
“`js
const socket = dgram.createSocket(“udp6”);
“`そして、待受アドレスを`0.0.0.0`から`::`に変更します。
“`js
socket.bind(PORT, “0.0.0.0”);
“`
“`js
socket.bind(PORT, “::”);
“`これだけです。
こうすることでIPv4・IPv6両対応のソケットを立てることができます。## TCP
プログラムの書き換えは必要ありません。
接続先アドレスをIPv6に指定するだけで勝手にIPv6で接
Expressを使ったWebサーバーにTLSの設定を追加してみる。
Node.js Expressを使って開発していたWebサーバーにSSLの設定を追加できたのでその方法について投稿いたします。
### 流れ
1. OpenSSLのインストール
2. 秘密鍵とSSL証明書ファイルの作成
3. サーバー設定ファイルにTLS有効化の設定を追加### OpenSSLのバージョンについて
OpenSSLのバージョンは、LibreSSL 2.8.3 で設定いたしました。ソースコードとプルリクエストについては、下記の通りです。
ソースコード
プルリクエスト### 1. OpenSSLのインストール
まずは、OpenSSLをインストールします。
Mac OSなら下記コマンドでインストールします。
brew install openssl
### 2. 秘密鍵とSSL証
[守] TypeScriptことはじめ
## はじめに
対象はTypeScript初学者(私)。TypeScript開発において必要最小限のコマンドや手順を備忘としてまとめておきます。「[WEB+DB PRESS Vol.117 / 実践投入TypeScript](https://gihyo.jp/magazine/wdpress/archive/2020/vol117)」を参考とさせていただきました。「もっとこうするとよいよ」のようなものがあればコメントいただけると嬉しいです。
※本記事記載のコード、コマンドの最終検証日は2022/02/05、実行環境のNode.jsはv16.13.2、TypeScriptコンパイラはv8.3.2。
## 開発環境を整備する
### 前提条件
– Node.jsがインストールされていること
### 実行手順
プロジェクトのホームディレクトリを整備後、Node.js環境を初期化、TypeScript開発に必要最小限のnpmパッケージをインストールし、TypeScriptコンパイラの設定ファイルを生成します。
“`sh
pm2で–tls-min-v1.0オプションを使う
タイトルの通りです。
ネット上に情報があまりないようなので共有します。~~~
node –tls-min-v1.0 app.js
~~~
で実行しているjsをpm2で使う方法は以下の通りです。~~~
pm2 start app.js –name app –node-args=”–tls-min-v1.0″
~~~
これで起動しておけば、~~~
pm2 restart app
~~~
で再起動しても「–tls-min-v1.0」オプションは有効のままです。
【2022年版】MacにNodejsをインストールする方法
# はじめに
M1チップのMacbookでNodejsをインストールする方法をまとめた# Homebrewをインストール
“`
/bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)”
“`
※Homebrewをインストール済みの方は次の手順へhttps://brew.sh/index_ja
インストール後は、次のコマンドでbrewコマンドが使えることを確認
“`
brew -v
“`
コマンドが使えない場合は下記参考https://qiita.com/wooooo/items/6d8a7de5ffafed1cc66c
# Nodebrewのインストール
“`
brew install nodebrew
“`インストール後は下記のコマンドでバージョンを確認
“`
nodebrew -v
“`続いて下記のコマンドを実行
“`
nodebrew setup
“`下記のコマンドを実行し、Nodejsをイ
もろもろ整備されたサンプルプロジェクト作成の手順のまとめ (github + monorepo + nextjs + commitlint + lint-staged + prettier + eslint + editorconfig)
## 環境構築からプロジェクト作成まで
自分でnextjsのプロジェクトを作るとなった際に、どうやってセットアップしたらいいかわからない、という声が多かったので、一例として[このプロジェクト](https://github.com/taijusanagi/nftcert)のセットアップ手順を各記事ごとにまとめてみました、
### github repository
まずはgithub repositoryを作ります。
https://qiita.com/taijusanagi/items/f71a088983fa08637fe1
### husky
次にhuskyの設定を入れます
https://qiita.com/taijusanagi/items/bd44d32efdba980f3f20
### commitlint
次にcommitlintの設定を入れます
https://qiita.com/taijusanagi/items/4117e9c621186b254a9f
### yarn monorepo
次にmonorepoの設定を入れます
https:
aws-sdk-mock でモック化できない問題が発生
実務でLambdaのコードの単体テストをしていて、aws-sdk-mockを使ってDynamoDBへのアクセスをモック化しようとしてもモック化されず困ったのですが、先輩に解決していただいたので、詰まった原因をシェアします。
##テスト環境
– MacOS 11.6.2
– NodeJS v16
– jest v27.4##ソースコード
以下の記事を参考にして書きました。– [【AWS】aws-sdk-mockでLambdaテストを行う](https://makky12.hatenablog.com/entry/2020/12/25/070000)
コード
“`put.js
const AWS = require(‘aws-sdk’);
const docClient = new AWS.DynamoDB.DocumentClient();
AWS.config.update({“region”: “ap-northeast-1”});
exports.handler = async (event) => {
return await Promise.all(
monorepo環境にnextjsを構築する備忘録
## nextjs
nextjsはreactのフロントエンドの開発フレームワークです。
今回は[こちらのプロジェクト](https://github.com/taijusanagi/nftcert)をセットアップする際に、nextjsの構築をおこなったので、備忘録として残します。
## 注意
こちらの記事でmonorepoを設定した後にnextjsを導入しました。
https://qiita.com/taijusanagi/items/cfd6ff7ba72e65439b66
monorepo環境下で実行すると下記のようなエラーが出ました。
“`
warning Missing version in workspace at “/Users/taijusanagi/Documents/workspace/taijusanagi/nftcert/packages/frontend”, ignoring.
error An unexpected error occurred: “Cannot read property ‘manifest’ of undefined”.
`
yarnのmonorepo構築の備忘録
## monorepo
この記事ではyarnを利用したmonorepo構築の備忘録です。
package.jsonに下記を追加します。
“`
// package.json“private”: true,
“workspaces”: [
“packages/**”
],
“`そして、packagesというディレクトリを作成して、その下に再度ディレクトリを任意の名前で作成し、package.jsonを作成します。
![Screen Shot 2022-02-05 at 12.45.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258956/4cc7ffc5-17c7-0bc3-e8ff-2c09ae13b413.png)
このpackage.jsonにはversionを指定することが必須となっており、またnameに指定した部分がmonorepoのワークスペースの名前となります。
今回は、“`@nftcert/sample“`がワークスペースの名前で
Commitメッセージをチェックするcommitlintの設定の備忘録
## commitlintとは
[Commitlint](https://commitlint.js.org/#/)は、Commitメッセージを特定のルールで守らせるための設定を行うためのツールです。Commitlintの設定手順についてチーム内で共有することが多かったので備忘録として残します。
詳しくルールをカスタマイズすることはできるのですが、この記事では既存のルールセットをそのまま利用し、動かせるようになることを目標としています。
package.jsonが置いてあるプロジェクトルートで下記を実行します。
“`
yarn add -D @commitlint/cli @commitlint/config-conventional
“`devDependenciesに下記が追加されます。
“`
//package.json“devDependencies”: {
“@commitlint/cli”: “^16.1.0”,
“@commitlint/config-conventional”: “^16.0.0”,
}
“`次
スクリプトをhook実行させるためのHuskyに関する設定の備忘録
## Huskyとは
スクリプトを特定のタイミングで実行させるためのツールです。
https://github.com/typicode/husky
今回は実際に[こちらのプロジェクト](https://github.com/taijusanagi/nftcert)をセットアップとしてhuskyを導入していきます。
こちらの記事に記載されているセットアップ手順を使用します。
https://typicode.github.io/husky/#/
“`
npx husky-init && yarn
“`上記を実行すると、package.jsonに下記のようにhuskyが追加されます。
“`
“devDependencies”: {
“husky”: “^7.0.0”
},
“scripts”: {
“prepare”: “husky install”
}
“`こちらのpre-commitというファイルに、npm testというscriptが記載されているのですが、こちらのpre-commitはcommitを行う前に特定のコマ
買ったばかりのM1 MacにNodejsの開発環境をセットアップする手順の備忘録
## 開発環境構築
チーム内で新しいメンバーに開発環境の構築から初めてもらうことが多いので、メモにしました。ある程度わかる人はググりつつ公式の記事を読みつつ進めていく方がいいのかなと思いますが、開発を始めたばかりで難しい人向けに備忘録として残しています。
こちらの記事では下記について紹介します。
– vscodeのインストール
– homebrewのインストール
– nvmのインストール
– nodejsのインストール
– yarnのインストール### vscodeのインストール
コードエディタであるvscodeをインストールしていきます。今回セットアップしようとしているnodejsでコードを書く場合にはvscodeを使用することが多いです。
こちらのvscodeのページにアクセスします。
https://code.visualstudio.com/
こちらのダウンロードをクリックして
![Screen Shot 2022-02-05 at 10.34.37.png](https://qiita-image-store.s3.ap-northeast-1.amazo
DynamoDBでデータがあるのに取得できない時に疑うこと
## 環境
– Nest.JS
– DynamoDB
– ※環境は関係なさそうなのでバージョン等は割愛## 事象
DynamoDB上にデータは存在するにも関わらず、データが取れない事象がありました。
「Between句が効いていないのでは」
「timestampがおかしいのでは」
「GSI(グローバルセカンダリインデックス)が効いていないのでは」
などと疑いましたが、どれも正しく設定されていました。## 結論
DynamoDBは、クエリー・スキャン共に1回のリクエストで最大1MBまでしかレスポンスできない制約がありました。参考: https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/Limits.html
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360277/da25c83b-110b-8df6-d65a-ad6d82f4cddb.png)## 解決方法
DynamoDBのレスポ
タスクスケジューラーでwsl上のnodeスクリプトを実行する
# タスクスケジューラーで新規のタスクを作成する
わかるだろうから書かん!
# タスクの詳細の「操作」タブ
#操作を作る
以下の内容を設定する
①:C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
②:node index.js
③:\\wsl$\Ubuntu-20.04\home\user\docker\path-to\node
![2022-02-05_00h30_31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1681950/16954877-8fcd-b002-306d-2c69a237f946.png)![2022-02-05_00h28_29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1681950/e6f13804-82f7-506f-9eb0-d30227077b9e.png)
これで完成!
【NestJS初心者】管理画面API作ったよって話① 〜環境構築って大変〜
Nest.jsに慣れるために
Nest.jsを使って、管理画面APIを作ってみたいと思います〜!#### Let’s start?
## 環境
– Node.js v15.0.0 -> v16.10.0
– MySQL
– macOS##インストール
以下のコマンドでNest CLIをインストールし、プロジェクトを作成します。“`
$ npm i -g @nestjs/cli
$ nest new TodoApp // nest new [プロジェクト名]
⚡ We will scaffold your app in a few seconds..CREATE …..
CREATE …..
CREATE …..
.
.
.
“`
![スクリーンショット 2022-02-04 20.07.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518047/792c0652-a96c-92f5-6068-1b97da092b3f.png)
どのパッケージ