防范常见的 Web 攻击
什么是 SQL 注入攻击
SQL 注入是指攻击者在 HTTP 请求中注入恶意的 SQL 代码,服务器在构建数据库查询命令时未做过滤,导致恶意 SQL 被构造并执行。
示例:
用户登录时输入用户名 lianggzone,密码 ' or '1'='1。若后端使用字符串拼接方式构建 SQL:
select * from user where name = 'lianggzone' and password = '' or '1'='1'
这将绕过验证,使查询结果不为空。
防范措施:
- Web 端:
- 有效性检验。
- 限制字符串输入长度。
- 服务端:
- 严禁拼接 SQL 字符串。
- 必须使用预编译的
PreparedStatement。 - 再次进行有效性检验(外部不可信原则)。
- 过滤特殊字符(如单引号、双引号)。
什么是 XSS 攻击
跨站脚本攻击(Cross-Site Scripting),指攻击者篡改网页嵌入恶意脚本,在用户浏览时控制浏览器执行恶意操作。
防范措施:
- 前端与服务端同时实施字符串长度限制。
- 前端与服务端对 HTML 内容进行转义处理,将
<,>,&,",'等特殊字符编码。 - 核心原则:对所有输入数据做严格的过滤和转义。
什么是 CSRF 攻击
跨站请求伪造(Cross-Site Request Forgery),指攻击者利用受害者的身份向第三方网站发送恶意请求。
常见后果:
- 盗用身份发邮件、短信。
- 进行转账交易。
- 窃取账号信息。
防范措施:
- Token 机制: 在 HTTP 请求中添加 Token 验证,缺失或错误则拒绝。
- 验证码: 关键操作添加验证码(作为辅助手段)。
- Referer 识别: 检查 HTTP Header 中的 Referer 字段,若非本站来源则拒绝(注意 HTTPS 跳转 HTTP 等场景可能失效)。
- 安全框架: 使用 Spring Security 等框架提供的防护功能。
什么是文件上传漏洞
文件上传漏洞指攻击者上传可执行脚本文件,从而获得服务端命令执行权限。


