個人開発者も脆弱性対策をちゃんとしよう

この記事は「[Snykを使って開発者セキュリティにまつわる記事を投稿しよう！ by Snyk Advent Calendar 2022](https://qiita.com/advent-calendar/2022/snyk)」への参加記事です。

# 個人開発者の皆さん、脆弱性対策、やってますか？

こんにちは、株式会社dottでエンジニャーをしているHALといいます。
自分は仕事以外に個人開発として、スマホアプリやWEBアプリの開発をしたりしています。

[【Twitter Moment：作ったアプリとか】](https://twitter.com/i/events/1281795167771484160?s=20)

一応、セキュリティに気を使ってアプリを作成していますが、個人開発だとリソースが限られていることもあり、万全かと聞かれると不安な面もあります。
特に、アプリの中で使用している脆弱性の情報とか、最新の攻撃手法に対策できているかといったところは、情報のアップデートを頻繁にしないといけないのでなかなか大変です。
正直なところ、大して儲かってないアプリだと、脆弱性対策にコストをかける余裕はない、という人が多いのではないでしょうか。

個人開発をしている人の中には、ゆくゆくは自分のアプリが大当たりして、ガッポガッポのウッハウハになってほしいなぁなんて妄想している人もいるでしょう。
もしもバズったりしてたくさん使ってもらえるようになったとき、脆弱性が見つかって情報流出が起きたり、危険なアプリだと広まったら困りますよね。
せっかくバズっても、セキュリティ対策・脆弱性対策が足りていないがために水を差すようなことになってはもったいないです。
いつの日かやってくるその時のために、脆弱性対策はしておくべき（should）ではなく、しておかなければなりません（must）。

# 脆弱性対策も無料から始められる。そう、Snykならね

お金も時間もない個人開発者でも、[Snyk](https://go.snyk.io/jp.html)を使えば無料で手軽に脆弱性対策が始められます。

https://go.snyk.io/jp.html

登録のための手順などは他の記事に譲るとして、今回は個人開発者におすすめのSnykの機能を紹介していこうと思います。

## GitHubリポジトリからの自動解析

Snykの基本機能なので当たり前なのですが、やはり自動で脆弱性の解析をしてくれるのが良いです。
特にGitHubリポジトリと連携する設定をするだけで、勝手に読み込んで勝手に解析して、さらに勝手に修正のためのPRまで起こしてくれます。

![Snykが自動生成したPR](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/571256/3f832afe-b110-429b-b3e2-0dac3dea6206.png)

ただ、自動生成してくれるのには数の制限があるようで、たくさんアプリ作ってる人は一部しか対応してくれないってことになるようです。
まぁ、そこは仕方ないですね・・・。

## ライブラリの脆弱性検知

自動解析の中で嬉しいのはライブラリの脆弱性検知ですね。
対象のライブラリとそれがどういった脅威にさらされているか、またその重大度はどれくらいかを教えてくれます。

![ライブラリの脆弱性検知](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/571256/0ea1295a-751e-0dd1-cb35-d4b1b0bdb4aa.png)

この例だと、momentに存在する脆弱性の情報と、それを解消するためにどのバージョンまで上げないといけないか（Fixed in）がわかります。
ちなみに、momentはすでに開発が終了しているライブラリですので、基本的には他の日時を扱うライブラリに置き換えましょう。
自分も基本的には置き換えを進めていたのですが、まだ使っているアプリがあったことにSnykを使って気付くことが出来ました。

## ソースコード上の脆弱性検知

これも個人開発者には嬉しい機能じゃないかなと思うのですが、ソースの書き方として問題がある・脆弱性がある箇所を教えてくれます。

![ソースコードの脆弱性検知](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/571256/f767a509-a1cc-22ea-7518-0cfd487846e7.png)

たとえばこちらではクロスサイトスクリプティング（XSS）の可能性があるコードを検知してくれました。
「サニタイズせずにレスポンスを返すのは危険だよ」という指摘ですね。
実際にはこの箇所でXSSが発生する可能性はないので、Ignoreで無視することが出来ますが、まずは指摘してもらうというのが良いですね。

個人開発だとどうしても一人で開発をしていてレビューをしてもらうこともないので、セキュアなコーディングについて問題に自分が気付けなければそのままになってしまいます。
Snykで指摘してもらえれば、レビューの代わり・・・とはなりませんが、コーディング品質を補完してくれる存在にはなるでしょう。

ちなみに、Secret情報のハードコーディングなんかも指摘してくれます。
どうしても個人開発だととりあえず動くようにすればいいやって思って、一部情報をハードコーディングしてしまうこともあると思います。
後で直すつもりだったものが、直し忘れている場合でも、Snykに指摘してもらえれば修正することが可能です。

## Dashboardでの横断的な確認

自分のように個人開発で作ったアプリが１０近くになってくると、過去に作ったものはあまり手を付けなくなってきます。
定期的にライブラリのアップデートくらいはしていますが、動いているものが動かなくなっても困るので、あまり触りたくないのが正直なところです。

ただ、脆弱性が存在する場合はそうも言っていられません。
脆弱性の内容によっては対応不要な場合もありますが、脆弱性が存在するかどうかを各アプリでチェックするだけで手間がかかります。

その点、Snykでは定期的に各アプリの脆弱性の情報をチェックして、Dashboardで状況を知らせてくれます。
とりあえずそこを見ればざっくりと状況を掴むことができるので、問題が起きているアプリだけをピックアップして対応していけば良いわけです。
この点も、時間のない個人開発者には嬉しいところですね。

![Dashboardイメージ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/571256/a5e3ccde-55f8-365b-63a8-86d83f067255.png)

（CRITICALを早急に解消しなければ・・・）

# 個人開発者ならSnykを使うべき

そんなわけで、個人開発者に嬉しいSnykの機能を紹介してきました。
チームで使う場合はさらに担当者やラベル付け、レポートの機能などもありますが、そういった便利な機能は有料のプランになります。
ただ、この記事で紹介した範囲であれば（Limit的な制限はありますが）無料会員でも利用できます。

個人開発者だとどうしても孤独な開発になってしまい、特にセキュリティ周りは「これで良いんだろうか？」と思いながら開発していることが多いです。
そんなときに、Snykが自動解析・脆弱性検知をしてくれることで、頼もしいパートナーを得たように感じました。
ぜひ皆さんも、Snykを使って脆弱性対策を実施してみてください。