cat posts/%e3%82%bb%e3%82%ad%e3%83%a5%e3%83%aa%e3%83%86%e3%82%a3%e3%82%92%e5%be%8c%e5%9b%9e%e3%81%97%e3%81%ab%e3%81%97%e3%81%a6%e3%81%84%e3%81%9f%e8%87%aa%e5%88%86%e3%81%b8%e3%81%ae%e5%8f%8d%e7%9c%81%e6%96%87.md

【懺悔】昔のワイのコード、SQL に変数を直で埋め込んでた

1 風吹けば名無し 2026/07/02(木) 21:04:00 ID:Se9cUr0h
「動けばいい」で作っとった時期のコードを見直して青ざめたわ
セキュリティは「後でちゃんとやる」と思っとった結果、直すコストが高くついた

2 風吹けば名無し 2026/07/02(木) 21:05:23 ID:Ah5tQ8wn
何がやばかったんや

3 風吹けば名無し 2026/07/02(木) 21:06:08 ID:Se9cUr0h
>>2 まず SQL インジェクションや

// やってしまっていたこと
const query = `SELECT * FROM users WHERE name = '${name}'`;

// 正しい書き方
const query = `SELECT * FROM users WHERE name = ?`;
db.query(query, [name]);

4 風吹けば名無し 2026/07/02(木) 21:07:16 ID:Ah5tQ8wn
>>3 テンプレートリテラルで直接埋め込むのやめろ

5 風吹けば名無し 2026/07/02(木) 21:08:47 ID:Se9cUr0h
>>4 プレースホルダ使うだけで防げるんやけどな
ORM 使えばほぼ自動で対処されるけど、生 SQL 書くときは意識せなあかん

6 風吹けば名無し 2026/07/02(木) 21:09:40 ID:Jb3nK7fp
他には

7 風吹けば名無し 2026/07/02(木) 21:10:56 ID:Se9cUr0h
>>6 API キーをコードに直書きして、そのままリポジトリにコミットしたことある

8 風吹けば名無し 2026/07/02(木) 21:11:34 ID:Jb3nK7fp
>>7 一番やったらあかんやつやんけ

9 風吹けば名無し 2026/07/02(木) 21:12:35 ID:Se9cUr0h
>>8 GitHub の自動スキャンに引っかかって気づいた
今はシークレットは必ず環境変数で、.gitignore に .env や

10 風吹けば名無し 2026/07/02(木) 21:13:59 ID:Vq6yR2mc
認証まわりは大丈夫やったんか

11 風吹けば名無し 2026/07/02(木) 21:14:45 ID:Se9cUr0h
>>10 パスワードを平文で保存しとったことがあるわ(初期の個人プロジェクトや)

12 風吹けば名無し 2026/07/02(木) 21:15:54 ID:Vq6yR2mc
>>11 ファッ!?

13 風吹けば名無し 2026/07/02(木) 21:17:26 ID:Se9cUr0h
>>12 bcrypt や argon2 でハッシュ化は今では必須の認識やけど、最初はそこまで考えてなかったんや

14 風吹けば名無し 2026/07/02(木) 21:18:20 ID:Ah5tQ8wn
反省しとるならええわ

15 風吹けば名無し 2026/07/02(木) 21:19:37 ID:Se9cUr0h
>>14 セキュリティの問題は「動いとる間は気づかん」のが怖いとこや
OWASP Top 10 を一回通しで読んどくとチェックリストとして使えるで