叡智の三猿

〜森羅万象を「情報セキュリティ」で語る

当サイトは、アフィリエイト広告を使用しています。

どこがどこにつながっているの?

プログラマーの新井くんは、他の人が開発したシステムの保守を担当することになりました。ある日、そのシステムのソースコードを見た、新井くんは、驚愕しました。

「これ、どこがどこにつながっているのか、めちゃくちゃ分かりにくいよ!まるで〇〇だな」

〇〇に入る言葉を選んでください。

ローコード
アジャイル
スパゲティ





答え:ウ
無秩序にみえても皿の上では、味の秩序をもたらす美味しいスパゲティ。

トマトソースの赤が奏でる情熱と、熱とともに香るガーリックと、こんがり焼けたベーコン。週末はママ スパゲティならぬパパ スパゲティを家族に提供します。


しかし、ソースコードの世界では、どこが始まりでどこが終わりか分からなくなる、ぐちゃぐちゃしたプログラムをスパゲティコードと揶揄します。

スパゲティコードは、保守が難しく、アプリケーションの脆弱性をもたらす原因にもなりやすいのです。

下記のコード(PHP)は、典型的なSQLインジェクションを含んだコードです。SQLインジェクションは、アプリケーションの脆弱性を利用して、意図しないSQL文をデータベースに注入し、データベースを不正に操作する攻撃手法です。
※$connはデータベースへの接続情報

// ユーザーからの入力をそのままSQL文に入れてしまっている
$username = $_GET['username'];
$sql = "SELECT * FROM users WHERE name = '$username'";
$result = mysqli_query($conn, $sql);

$_GET['username'] に、 hacker' OR '1'='1 のような値を入れられると、システムのデータベースに保持されたユーザー情報が全件取得されることになります。

これを防ぐには、入力値をエスケープ処理(無害化)する必要があります。しかし、コードがスパゲティ状態と化したら、コードのある部分に於いては、SQLインジェクション対策をしているけれど、別な部分では対応が漏れるという状況は容易に想像がつきます。

残念ながら、アプリケーションが粗製乱造される昨今は、脆弱性に溢れたコードが多数存在します。

プログラマーは、クライアントからの納期に追われてます。コードを生成する時間が足りないと、綺麗で整理されたコードを書くより、とにかく動けばいいという作り方になってしまいます。その結果、ひとつひとつの機能が無秩序に積み重ねられ、ぐちゃぐちゃになってしまうのです。