25c9002cbe
- Gitea Actions 配置 (.gitea/workflows/ci.yml) - PHPUnit 测试框架 (composer.json, phpunit.xml) - 示例测试用例 (tests/Unit, tests/Feature) - .gitignore 配置 流程说明: 1. feature/* 分支 push → 部署测试环境 → 运行测试 2. 测试失败 → 自动回退 + 通知 3. 测试通过 → 自动合并到 main → 部署正式环境 4. main 分支 push → 直接部署正式环境 需要配置 Secrets: - DEPLOY_KEY: SSH 私钥 - GITEA_TOKEN: 用于自动合并的 Token
66 lines
1.9 KiB
PHP
66 lines
1.9 KiB
PHP
<?php
|
|
/**
|
|
* 功能测试 - 安全检查
|
|
*/
|
|
|
|
namespace Tests\Feature;
|
|
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
class SecurityTest extends TestCase
|
|
{
|
|
/**
|
|
* 测试配置文件不暴露敏感信息
|
|
*/
|
|
public function testConfigDoesNotExposePassword(): void
|
|
{
|
|
$config = file_get_contents(__DIR__ . '/../../config.php');
|
|
|
|
// 确保没有硬编码的真实密码
|
|
$this->assertStringNotContainsString('123456', $config, '配置中不应包含简单密码');
|
|
$this->assertStringNotContainsString('password', strtolower($config), '配置中不应包含 password 字符串');
|
|
}
|
|
|
|
/**
|
|
* 测试 SQL 注入防护
|
|
*/
|
|
public function testConfigUsesPreparedStatements(): void
|
|
{
|
|
$config = file_get_contents(__DIR__ . '/../../config.php');
|
|
|
|
// 确保使用 PDO 预处理
|
|
$this->assertStringContainsString('prepare', $config, '应该使用 PDO 预处理语句');
|
|
$this->assertStringContainsString('execute', $config, '应该使用 execute 执行预处理');
|
|
}
|
|
|
|
/**
|
|
* 测试 XSS 防护
|
|
*/
|
|
public function testOutputUsesHtmlspecialchars(): void
|
|
{
|
|
$files = [
|
|
__DIR__ . '/../../dashboard.php',
|
|
__DIR__ . '/../../view.php',
|
|
];
|
|
|
|
foreach ($files as $file) {
|
|
if (file_exists($file)) {
|
|
$content = file_get_contents($file);
|
|
$this->assertStringContainsString('htmlspecialchars', $content,
|
|
basename($file) . ' 应该使用 htmlspecialchars 防止 XSS');
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 测试 Session 安全
|
|
*/
|
|
public function testSessionSecurity(): void
|
|
{
|
|
$config = file_get_contents(__DIR__ . '/../../config.php');
|
|
|
|
// 确保有 session 检查
|
|
$this->assertStringContainsString('session', strtolower($config), '应该有 session 相关配置');
|
|
}
|
|
}
|