サンプルコード
cbriefで解析できるサンプルコードをご紹介します。実際に試してみて、どのような結果が得られるか確認してください。
1. セキュリティリスクのあるJavaScriptコード
// ユーザー入力をそのままevalで実行(危険!)
function executeUserCode(userInput) {
return eval(userInput);
}
// SQLインジェクションの脆弱性
function searchUser(username) {
const query = "SELECT * FROM users WHERE name = '" + username + "'";
return database.query(query);
}
// XSS脆弱性
function displayMessage(message) {
document.getElementById('output').innerHTML = message;
}
期待される検出結果:
- High:
eval()の使用 - High: SQLインジェクション
- Medium: XSS脆弱性
2. より安全なコード(修正後)
// サンドボックス化された関数の実行
function executeUserCode(userInput) {
const safeFunction = new Function('return ' + userInput);
return safeFunction();
}
// パラメータ化クエリ
function searchUser(username) {
const query = 'SELECT * FROM users WHERE name = ?';
return database.query(query, [username]);
}
// テキストコンテンツとして表示
function displayMessage(message) {
document.getElementById('output').textContent = message;
}
3. Pythonコードのサンプル
import pickle
import os
# Pickleの安全でない使用
def load_data(filename):
with open(filename, 'rb') as f:
return pickle.load(f) # 危険!
# ハードコードされた認証情報
def connect_to_db():
username = "admin"
password = "password123" # ハードコード(危険!)
return database.connect(username, password)
# コマンドインジェクション
def process_file(filename):
os.system(f"cat {filename}") # 危険!
期待される検出結果:
- High: Pickleの安全でない使用
- High: ハードコードされた認証情報
- High: コマンドインジェクション
4. TypeScriptの型安全なコード
interface User {
id: number;
name: string;
email: string;
}
// 型安全なユーザー検索
async function searchUser(username: string): Promise<User[]> {
const query = 'SELECT * FROM users WHERE name = $1';
const result = await db.query(query, [username]);
return result.rows as User[];
}
// 入力検証
function validateEmail(email: string): boolean {
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
return emailRegex.test(email);
}
試し方
- 上記のコードをコピー
- ホーム画面の入力エリアに貼り付け
- 「分析」ボタンをクリック
- 結果を確認
注意事項
これらのサンプルコードは、教育目的で作成されています。実際のプロダクションコードでは、適切なセキュリティ対策を実装してください。