一、弱口令
产生原因
弱口令的产生主要与用户的安全意识薄弱及个人使用习惯有关。为了便于记忆,用户往往设置简单的密码,或者直接使用系统默认的初始密码。
危害
攻击者利用弱口令可以轻松进入后台管理系统修改资料,侵入金融系统盗取资金,访问 OA 系统获取企业内部机密文件,甚至控制监控系统进行实时监控,造成严重的数据泄露和财产损失。
防御建议
设置强密码应遵循以下原则:
- 不使用空口令或系统默认口令。
- 密码长度不小于 8 个字符,建议 12 位以上。
- 避免使用连续字符(如 AAAAAAAA)或重复组合(如 tzf.tzf)。
- 密码应由大写字母、小写字母、数字和特殊字符四类中的至少三类混合组成。
- 不包含个人敏感信息,如姓名、生日、手机号、邮箱等。
- 避免使用字典单词或简单的键盘序列。
- 定期更换密码,建议每 90 天更新一次。
二、SQL 注入
产生原因
当 Web 应用向数据库传递 SQL 语句时,如果未对用户输入的参数进行严格过滤或转义,攻击者可以构造特殊的 SQL 语句,将其作为代码执行。
本质
将用户输入的数据当作可执行的代码来处理,违背了'数据与代码分离'的安全原则。
关键点
- 用户能够控制输入的内容。
- Web 应用将用户输入的内容直接带入数据库执行。
危害
- 盗取网站敏感信息(如用户表、配置表)。
- 绕过后台认证登录。
- 提权获取服务器系统权限。
- 读取或修改数据库文件。
防御措施
- 预编译语句:使用 PreparedStatement 绑定变量,确保参数不会被解析为 SQL 命令。
String sql = "SELECT * FROM user WHERE id = ?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setInt(1, userId); - 输入过滤:使用正则表达式过滤特殊字符(如
select,union,drop等)。 - 最小权限原则:数据库连接账号仅授予必要的操作权限。
三、文件上传漏洞
原理
若服务端未对上传文件的类型、内容或后缀名进行严格验证,攻击者可上传恶意脚本文件(如 .php, .jsp, .sh),从而在服务器上执行任意代码。
成因
- 服务器配置错误,允许脚本目录执行。
- 前端校验被绕过。
- 后端白名单/黑名单过滤不严。
危害
- 上传 Webshell 获取服务器控制权(GetShell)。
- 篡改网站页面内容。
- 窃取服务器敏感数据。
防御措施
- 白名单机制:仅允许特定的安全后缀(如
.jpg,.png)。 - 目录权限:上传目录设置为不可执行权限。
- 重命名文件:使用随机文件名存储上传文件。
- 内容检测:检查文件魔数(Magic Number),防止后缀欺骗。
- 独立存储:将上传文件存储在独立的域名或对象存储服务中。
四、XSS(跨站脚本攻击)
原理
攻击者在网页中嵌入客户端脚本(通常是 JavaScript),当其他用户浏览该页面时,脚本在用户的浏览器上下文中执行,导致会话劫持或数据窃取。
危害
- 盗取用户 Cookie 和 Session 信息。
- 钓鱼诈骗,诱导用户输入敏感信息。
- 篡改页面内容,传播恶意软件。
- 内网扫描与横向移动。
防御措施
- 输出编码:根据上下文(HTML、JS、URL)对特殊字符进行编码(如
<转为<)。 - 输入验证:限制用户输入的长度和格式。
- HttpOnly:设置 Cookie 的 HttpOnly 属性,禁止 JavaScript 访问。
- CSP 策略:实施内容安全策略(Content Security Policy),限制脚本来源。
五、CSRF(跨站请求伪造)
原理
攻击者利用目标用户的身份(已登录状态),诱导用户点击恶意链接或提交表单,从而在用户不知情的情况下执行非本意的操作。
危害
- 篡改用户数据(如修改密码、转账)。
- 盗取隐私信息。
- 作为其他攻击链的辅助手段。
防御措施
- Referer 检查:验证 HTTP Referer 是否来自本站。
- Token 验证:在表单中添加一次性 Token(CSRF Token),服务端验证其有效性。
- 验证码:对关键操作要求输入验证码。
- SameSite Cookie:设置 Cookie 的 SameSite 属性为
Strict或Lax。
六、SSRF(服务器端请求伪造)
原理
攻击者构造恶意的 URL 发送给服务端,服务端在未做校验的情况下发起请求,导致攻击者通过服务端访问内网资源或外部服务。
危害
- 扫描内网端口和服务。
- 访问内网管理后台(如
http://127.0.0.1:8080/admin)。 - 读取本地文件(如
file:///etc/passwd)。 - 拒绝服务攻击(DoS)。
防御措施
- 协议限制:仅允许
http和https协议。 - IP 白名单:禁止访问内网 IP 段(如
127.0.0.1,10.x.x.x,192.168.x.x)。 - 统一错误信息:避免返回详细的网络错误信息以暴露端口状态。
- DNS 校验:解析域名后校验返回的 IP 地址是否为公网 IP。
七、XXE(XML 外部实体注入)
原理
应用程序解析 XML 输入时,未禁用外部实体加载,攻击者可定义外部实体引用恶意文件或内网资源。
危害
- 任意文件读取。
- 内网端口探测。
- 拒绝服务攻击(Billion Laughs Attack)。
防御措施
- 禁用外部实体:在代码层面关闭 DTD 和外部实体解析。
- PHP:
libxml_disable_entity_loader(true); - Java:
dbf.setExpandEntityReferences(false); - Python:
etree.XMLParser(resolve_entities=False)
- PHP:
- 输入过滤:过滤
<!DOCTYPE和<!ENTITY关键字。
八、远程代码执行漏洞 (RCE)
原理
应用程序调用系统命令函数(如 system, exec)时,若攻击者可控制传入参数,即可拼接恶意命令执行。
危害
- 完全控制系统权限。
- 安装后门程序。
- 破坏系统稳定性。
防御措施
- 避免使用危险函数:尽量不直接使用
eval,system,exec等函数。 - 参数过滤:对输入参数进行严格的白名单校验和转义。
- 最小权限:运行服务的账户权限应限制在最低范围。
- 沙箱隔离:在容器或沙箱环境中运行不可信代码。
九、反序列化漏洞
原理
程序对用户输入的序列化字符串进行反序列化时,未验证数据完整性,攻击者可构造恶意对象触发代码执行。
危害
- 远程代码执行(RCE)。
- 权限提升。
- 任意文件读取。
防御措施
- 避免反序列化:尽量使用 JSON 等安全格式替代原生序列化。
- 完整性校验:使用数字签名验证数据未被篡改。
- 输入验证:严格控制反序列化函数的参数类型和内容。
- 代码审计:定期检查第三方库和自定义序列化逻辑。
十、目录遍历漏洞
原理
Web 应用在处理文件路径时,未对用户输入的文件名进行充分校验,攻击者可通过包含 ../ 等字符访问服务器上的受限目录。
危害
- 读取敏感配置文件(如
config.php,.env)。 - 访问源代码文件。
- 获取服务器文件系统结构。
防御措施
- 路径规范化:将用户输入的路径标准化,去除
..片段。 - 白名单校验:限制可访问的文件目录范围。
- 权限控制:Web 服务进程不应拥有过高文件系统权限。
- 输入过滤:禁止输入中包含
/或\等特殊字符。

