はじめに
「Stack Overflowのコード、動いたからOK!」
え、まだコードの意味を理解せずコピペしてるんですか?このやり方でセキュリティホールを埋め込んだ事例が後を絶ちません
この記事で解決すること
動画「【恐怖】コピペコードを意味を知らず本番投入」の補足記事です。
動画では時間の都合で触れられなかった詳細を解説します。
問題:なぜこれが危険なのか
え、まだコードの意味を理解せずコピペしてるんですか?このやり方でセキュリティホールを埋め込んだ事例が後を絶ちません
解決策:明日から使えるベストプラクティス
コードを1行ずつ読み、自分の要件に合わせて書き直してから使う
以下は、YouTubeや技術ブログ向けに使えるように、「危険な例 → なぜ危険か → ベストプラクティス」の流れでまとめた具体例です。
問題:なぜこれが危険なのか
え、まだコードの意味を理解せずコピペしてるんですか?
Stack OverflowやAIが出力したコードをそのまま使うと、知らないうちにセキュリティホールや重大なバグを埋め込むことがあります。
例えば、こんなコードを見たことはありませんか?
❌ コピペした危険なコード(Node.js / Express)
app.get("/user", async (req, res) => {
const sql =
"SELECT * FROM users WHERE id = " + req.query.id;
const result = await db.query(sql);
res.json(result.rows);
});
一見普通に見えます。
しかし、
http://example.com/user?id=1 OR 1=1
というアクセスをされると、
SELECT * FROM users WHERE id = 1 OR 1=1
となり、
全ユーザー情報が取得されるSQLインジェクションになります。
さらに
?id=1; DROP TABLE users;
のような攻撃が成立する環境では、データベースを破壊される危険もあります。
つまり、
コードを書いた本人は意味を理解していなくても、攻撃者は意味を理解しています。
解決策:明日から使えるベストプラクティス
AIやWebからコードをコピーしたら、
最低でも1行ずつ「これは何をしているのか?」を説明できる状態にしてから使いましょう。
例えば、先ほどのコードなら、
✅ 修正版
app.get("/user", async (req, res) => {
// URLパラメータを取得
const userId = req.query.id;
// 数値以外は拒否
if (!/^\d+$/.test(userId)) {
return res.status(400).send("Invalid ID");
}
// プレースホルダーを使用
const sql =
"SELECT * FROM users WHERE id = $1";
// パラメータを安全に渡す
const result =
await db.query(sql, [userId]);
res.json(result.rows);
});
1行ずつ理解するポイント
const userId = req.query.id;
→ URLから渡された値を取得している。
if (!/^\d+$/.test(userId))
→ 数字だけ許可している。
攻撃文字列
1 OR 1=1
はここで弾かれる。
const sql =
"SELECT * FROM users WHERE id = $1";
→ SQL文字列を連結していない。
プレースホルダーを使用している。
db.query(sql, [userId]);
→ 値はSQLではなく「データ」として扱われる。
そのため、
1 OR 1=1
は単なる文字列となり、
SQLインジェクションは成立しない。
AIコードでも同じ
例えばAIがこんなコードを出力したとします。
import os
filename = input("File:")
os.system("cat " + filename)
便利そうですが、
sample.txt; rm -rf /
と入力されると、
cat sample.txt; rm -rf /
として実行される可能性があります(環境によって挙動は異なりますが、シェル経由でコマンドを組み立てる設計自体が危険です)。
安全な実装は、
import subprocess
filename = input("File:")
subprocess.run(
["cat", filename],
check=True
)
のように、引数をリストで渡してシェルを介さず実行する方法です。
明日から実践できるチェックリスト
AIやネットからコードをコピーしたら、次の5つを確認しましょう。
- この1行は何をしているか説明できるか
- 入力値の検証(バリデーション)はあるか
- SQL・OSコマンド・HTMLを文字列連結していないか
- 認証・認可・例外処理が適切に実装されているか
- 自分の要件に合わせて不要な処理を削除・修正したか
まとめ
「動いたからOK」ではなく、「理解したから使う」が安全な開発の基本です。
AIやWebのコードは優れた出発点ですが、そのまま採用するのではなく、1行ずつ意味を確認し、自分の要件に合わせて書き直す習慣を身につけることで、セキュリティ事故や予期しないバグを大幅に減らせます。
まとめ
脳死コピペを卒業して、理解したコードだけを使いましょう!
#まだやってるんですか #コードの女神はみた #プログラミングスキル
動画で見る
YouTubeショート動画でも同じテーマを解説しています👇
チャンネル登録・高評価もよろしくお願いします 🔔
この記事は「コードの女神は見た!」チャンネルの連動記事です。