Memo:

アイデアや気づきとかが雑に書き殴られる

XSS対策はエスケープ(サニタイズ)だけでは十分ではない

XSS は Web サイトの代表的な脆弱性で対策は意外と簡単じゃなかったりする。エスケープだけでは防ぎきれないケースが面白かったのでまとめてみる。

失敗した場合に安全に処理を中断するためのbash内での環境変数export方法(ShellCheck に教えてもらう)

例えば以下のようなスクリプトがあって、その結果を bash 内で実行し標準出力を環境変数として export したい。しかも、そのスクリプトは失敗する可能性があると仮定する(インターネット接続が必要なのに繋がってない環境で実行された。設定ミスによって権…

node-postgres の query_timeout でタイムアウトした後、DB のプロセスが残り続ける。

Node.js で PostgreSQL にアクセスするために node-postgres を使っている。設定で query_timeout を設定すると、実行時間が長いクエリをタイムアウトさせることができる。 しかし、タイムアウト後に DB 内のプロセスが残ったままになってリソースを圧迫し続…

PythonのJinjaを使って環境毎の設定をシンプルに管理したい

ある OSS を使いたい。そして、テスト環境と本番環境ではもちろん異なる config ファイルを使う必要がある。 そういった状況での一番単純な方法として、test-config.yaml, prod-config.yaml のように環境毎の設定ファイルを作ることがまず思い浮かぶが、以下…

ブラウザで Tensorflow.js を動かすと GPU メモリが増加し続けてクラッシュした

Tensorflor.js をブラウザで動かし、モデルをループで推論(predict)させていると GPU のメモリがジワジワと増え続け最終的にクラッシュしてしまうという現象があった。結論としては tf.Tensor オブジェクトは状況によっては(WebGL バックエンドが自動的に…

N番煎じでも CSRF を説明したい

Web アプリケーションの脆弱性、特に有名なものに3つあるが CSRF だけはピンと来なかった。色々調べて理解できたのでまとめてみる。 XSS SQL Injection CSRF CSRF の脆弱性 CSRF (Cross-Site Request Forgeries)脆弱性があると、利用しているサイトのユー…

1月から12月までの英語を覚えたい

私は、1月~12月までの英語名 January ~ December を覚えるのが苦手です。 なぜ 1~12 の数字にこのような無規則な文字列が対応しているのか、そして学校や私生活ではなぜその順番を覚えること必要とされるのかが理解できません(意地が悪いのだとしか思えな…

RxjsのSubjectを活用したNode.jsプログラムの依存関係制御

Node.js で依存関係をうまく制御するために、Pub/Sub パターンを使いたかった。調べて見つけた Rxjs の Subject を利用することで上手く実装できたと思う。Pub/Sub を使うと何が嬉しいのかと、Subject を使った実装をまとめてみる。 例には以下の FizzBuzz …

@golevelup/nestjs-rabbitmq で実装した consumer が queue を消化できなくなった

このライブラリで作成した consumer が queue を消化できなくなり、メモリ使用率がじわじわと上昇し(300MB/8h 位の速度) OOM で停止してしまった。 RabbitMQ の GUI やサーバーのメトリクスを見ると以下のような状況になっていた。 起動しているすべての c…

docker container のとめかた

このような Dockerfile を $docker build . -t webapp:latest でビルドした後、$ docker run webapp:latest でコンテナを立ち上げることができる。 # Dockerfile FROM python WORKDIR /app COPY . /app RUN pip install flask ENTRYPOINT ["bash", "entorypo…

JavaScript のテストフレームワーク Jest でテスト網羅率(カバレッジ)を計測したい

Jest は Meta(元 Facebook) が保守している、JavaScript のテスティングフレームワーク、らしい。Jest を使うと、コード網羅率(カバレッジ)を簡単に計測できる。 カバレッジを計測することで、テストが不足しているコードが検知できるようになって嬉しく…

UUID v4 はなぜ暗号的に安全な乱数が使われているんだろう?

UUID は分散システムで一意な Identifier として使えること(= 衝突しない前提で使える)を目的にした ID で、その version 4 はランダムに作るやつ。 この前ふと、uuid v4 をパスワードのような使い方をしていいのか?が気になって調べてみた。 Secure - Cr…

JavaScriptのProxyを使って、サードパーティーのクラスを書き換えずにログを出力したい

以下のようなサードパーティのクラスがあって、メソッドに渡された引数や結果をログに残すためにインターセプトしたい。 自分らが管理しているクラスなら、デコレーターを作るのがいいと思うが、サードパーティーのクラスを書き換えるのはちょっと嫌だ(保守…

JavaScript でクラスのメソッド名を取得する方法 - プロトタイプチェーンを利用して列挙不可能プロパティを取得する

Object.getPrototypeOf() でプロトタイプにアクセスし、そこから Object.getOwnPropertyNames() で得られる。 Object.getOwnPropertyNames()は列挙不可能プロパティも取得できるという特性を持っているので取得が可能になる。

保守性のためのコード設計の原則、DRY原則と直行性を考えてみる

> 良い設計は悪い設計よりも変更しやすい。第2章の初めの Tips である。確かにその通りだとおもう。良い設計とは?と聞かれるとパッと答えるのは難しいが「悪い設計とは?」と聞かれたときには以下のようなものが思い浮かぶ。