0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

え、まだコピペコードを意味を知らず本番投入してるんですか?動画では言えなかった補足

0
Last updated at Posted at 2026-08-03

はじめに

「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ショート動画でも同じテーマを解説しています👇

https://youtube.com/shorts/kA5UJRt97yI

チャンネル登録・高評価もよろしくお願いします 🔔


この記事は「コードの女神は見た!」チャンネルの連動記事です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?