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 を一回通しで読んどくとチェックリストとして使えるで