Web Programming
この記事では「Web Programming」について、基本の意味と使い方を初心者向けにやさしく説明します。
この記事のゴール:ブラウザー側のチェックは利用者が変更できることを知り、認証・権限・入力値の確認をサーバー側で行う理由を理解する。
改竄 JS(かいざん JS)
「改竄 JS(かいざん JS)」とは、本来のWebページで動作しているJavaScriptコードを改変(改ざん)して、意図しない動作をさせるためのスクリプトのことを指します。
つまり、ユーザーがWebブラウザ側で自由にJavaScriptを書き換えたり追加したりして、本来の入力チェックや制御をすり抜ける行為です。
なぜ「改竄」できるのか?
JavaScriptはクライアント(ユーザーのブラウザ)側で動作します。
ユーザーはブラウザの開発者ツールを使って、読み込まれたJavaScriptコードを無効化したり書き換えたりできます。
また、独自のJavaScriptを実行することも可能です(例:コンソールに直接打ち込む、ブックマークレット、外部スクリプトを読み込む)。
具体例
例1: 入力チェックを削除
本来のHTMLフォームには次のようなチェックがあるとします:
JavaScript
if (age < 18) {
alert("18歳未満は登録できません");
return false;
}
攻撃者はブラウザの開発者ツールで、このコードを削除したりreturn false;をreturn true;に書き換えて送信すれば、未成年でも送信できてしまいます。
例2: 改竄した送信
ブラウザのコンソールで次のように直接フォーム送信:
JavaScript
document.querySelector("form").submit();
→ 本来のチェック関数をすべてスキップして送信できる。
例3: 外部から勝手に送信
cURL や Python の requests を使って、自分でHTTPリクエストを作成して送信する。
→ JavaScript自体が実行されないので、HTMLやJSのバリデーションは全て無視される。
なぜ危険なのか?
HTMLの属性(required, min, max)やJavaScriptによるバリデーションは「ユーザーが間違えないように手助けするため」のもの。
攻撃者は簡単にバイパスできるので、サーバー側のチェックが必須です。
安全に設計するポイント
- ログイン状態や操作権限は、毎回サーバー側で確認する。
- 価格、ユーザーID、権限などをブラウザーから受け取っただけで信頼しない。
- 入力値の形式・範囲・業務上のルールをサーバー側でも検証する。
- クライアント側のチェックは、エラーメッセージを早く表示するための補助として使う。
「ボタンを無効にする」「コードを難読化する」「hiddenフィールドに値を隠す」だけでは、秘密や安全性を守れません。HTTPS、適切な認証・認可、CSRF対策などを、サービスの仕組みに合わせて組み合わせます。