2026.05.25 | youres | 13次围观
sions-Policy'
'X-XSS-Protection' = 'XSS Protection'
}
$score = 0; $total = $securityHeaders.Count
foreach ($h in $securityHeaders.GetEnumerator()) {
$v = $headers[$h.Key]
if ($v) { Write-Host "[OK] $($h.Value) => $v"; $score++ }
else { Write-Host "[MISS] $($h.Value)" }
}
Write-Host "Score: $score / $total"
return @{Score=$score; Total=$total}
} catch { Write-Host "FAIL: $_" }
}
这个函数会逐一检查7个关键安全头,给出通过或缺失的状态标记,最后输出一个简单的安全评分。你可以把它保存为 Check-SecurityHeaders.ps1 文件,方便日常使用。
批量检查多个网站
PowerShell的管道操作让批量检查变得非常简单。把要检查的域名放在数组里,循环调用即可:
$sites = @('https://www.example.com','https://www.google.com','https://github.com')
foreach ($site in $sites) {
$r = Invoke-WebRequest -Uri $site -Method Head -UseBasicParsing -ErrorAction SilentlyContinue
if ($r) {
$h = $r.Headers['Strict-Transport-Security']
$c = $r.Headers['Content-Security-Policy']
$x = $r.Headers['X-Frame-Options']
$ok = if ($h -and $c -and $x) {'PASS'} else {'WARN'}
Write-Host "[$ok] $site"
} else { Write-Host "[FAIL] $site" }
}
通过这种方式,你可以快速对一批域名进行安全巡检,找出哪些站点缺少关键安全头。
常见问题与解决
1. TLS版本不兼容导致请求失败
如果目标网站要求TLS 1.2或更高版本,而你的PowerShell默认使用TLS 1.0,会出现连接错误。解决方法是在开头强制设置:
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
PowerShell 7.x 默认支持TLS 1.2和1.3,不需要额外配置。如果你还在用Windows PowerShell 5.1,建议升级到PowerShell 7。
2. 为什么一定要加 -UseBasicParsing
在Windows PowerShell 5.1中,不加这个参数时,PowerShell会尝试用IE引擎解析HTML,可能导致各种不一致的行为。始终加上 -UseBasicParsing 可以避免这些问题。
3. 重定向导致响应头变化
Invoke-WebRequest 默认会跟随重定向(最多5次)。如果你需要检查重定向中间环节的响应头,可以禁止自动跳转:
$response = Invoke-WebRequest -Uri 'http://example.com' -MaximumRedirection 0 -ErrorAction SilentlyContinue
$response.Headers['Location']
4. 输出中文乱码怎么处理
在Windows PowerShell中,如果响应头包含非ASCII字符,可能出现乱码。在开头设置编码即可:
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
[OutputEncoding] = [System.Text.Encoding]::UTF8
核心安全响应头清单
| 响应头名称 | 作用 | 推荐值 |
|---|---|---|
| Strict-Transport-Security | 强制HTTPS访问 | max-age=31536000; includeSubDomains |
| Content-Security-Policy | 控制资源加载来源 | default-src 'self' |
| X-Frame-Options | 防止页面被嵌入iframe | DENY 或 SAMEORIGIN |
| X-Content-Type-Options | 防止MIME类型嗅探 | nosniff |
| Referrer-Policy | 控制来源信息泄露 | strict-origin-when-cross-origin |
| Permissions-Policy | 控制浏览器功能权限 | camera=(), microphone=() |
总结
PowerShell完全可以替代curl来完成网站安全响应头的检查工作,而且在Windows环境下更加方便。关键要点:
- 基础检查用
Invoke-WebRequest -Method Head -UseBasicParsing即可 - 批量巡检利用PowerShell的数组和循环能力轻松实现
- 注意兼容性:加上
-UseBasicParsing,设置好TLS版本 - 保存为脚本可以像curl一样随时调用,还能扩展更多检测项
如果你想在Windows服务器上做安全巡检,PowerShell是比curl更顺手的工具。不需要额外安装,不需要学习新语法,打开终端就能用。
相关文章
版权声明
本文仅代表个人观点。
本文系AI辅助作者原创,未经许可,转载请保留原文链接。

发表评论