Moss (Measure Of Software Similarity) 是斯坦福大學開發的代碼相似度檢測系統,廣泛用於課程作業防作弊、開源項目抄襲排查、企業代碼審計。支持 C、C++、Java、Python、PHP、JavaScript 等 20+ 語言,通過特徵指紋算法識別結構相似代碼片段,甚至能檢測變量重命名、語句重排等混淆手段。
Moss 免費開放,但需註冊賬號:
moss@moss.stanford.eduregisterusermail your_email@example.com<?php
require_once 'vendor/autoload.php'; // 或 include 'moss.php';
$userid = 'your_moss_userid'; // 替換為你的 userid
$moss = new Moss($userid);
// 設置檢測語言(影響解析器選擇)
$moss->setLanguage('php'); // 可選:c, cc, java, python, javascript, php...
// 添加待檢測文件(支持通配符)
$moss->addFilesByWildcard('app/**/*.php'); // 遞歸掃描
// 或單個文件
$moss->addFile('src/Core/Database.php');
// 添加基準文件(不參與相似度計算,僅作為參考庫)
$moss->addBaseFile('vendor/laravel/framework/src/Illuminate/Database/Connection.php');
// 可選:提交備註
$moss->setCommentString('Quarterly code audit 2024-Q3');
// 發送並獲取報告 URL
$reportUrl = $moss->send();
echo "Moss 報告地址: $reportUrl\n";
// 輸出示例: https://moss.stanford.edu/results/123456789
# .github/workflows/moss-check.yml
name: Moss Code Similarity Check
on: [pull_request]
jobs:
moss:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup PHP
uses: shivammathur/setup-php@v2
with: { php-version: '8.2' }
- name: Install Moss PHP SDK
run: composer require --dev phhere/moss-php
- name: Run Moss Scan
env:
MOSS_USERID: ${{ secrets.MOSS_USERID }}
run: |
php -r '
require "vendor/autoload.php";
$m = new Moss(getenv("MOSS_USERID"));
$m->setLanguage("php");
$m->addFilesByWildcard("app/**/*.php");
$url = $m->send();
echo "::notice ::Moss Report: $url";
'
$langMap = [
'php' => ['app/**/*.php', 'src/**/*.php'],
'js' => ['resources/js/**/*.js', 'resources/vue/**/*.vue'],
'sql' => ['database/migrations/*.php'], // 遷移文件實為 PHP
];
foreach ($langMap as $lang => $patterns) {
$moss = new Moss($userid);
$moss->setLanguage($lang);
foreach ($patterns as $p) $moss->addFilesByWildcard($p);
$url = $moss->send();
file_put_contents("moss_report_{$lang}.txt", $url . PHP_EOL, FILE_APPEND);
}
| 現象 | 原因 | 解決 |
|---|---|---|
| 提交後長時間無響應 | Stanford 服務器負載高/網絡不通 | 重試機制;檢查防火牆是否阻擋出站 80/443 端口 |
| 報告顯示 "No matches found" | 代碼庫過小/語言設置錯誤 | 確認 `setLanguage` 與文件後綴匹配;增加基準文件 |
| PHP 解析錯誤 | 混合 HTML/JS 干擾 | 預處理提取純 PHP 片段,或使用 `php -w` 去除註釋空白 |
將 Moss 接入代碼審查流程,能以極低成本建立「代碼原創性」基線。配合 Git Hooks、CI Gates、定期全量掃描,構建從開發提交到發布上線的多層防作弊/防抄襲體系,守護技術資產純淨度。