# 安全编程实践: 防止SQL注入和XSS攻击的技术方案
1. SQL注入(SQL Injection)防御体系构建
1.1 参数化查询(Parameterized Queries)的强制实施
在OWASP TOP 10安全风险榜单中长期位居榜首的SQL注入攻击,其本质是攻击者通过构造恶意输入改变原始SQL语义。根据Veracode 2022年应用安全报告显示,超过34%的Web应用存在可被利用的SQL注入漏洞。
参数化查询通过预编译语句(Prepared Statement)将SQL逻辑与数据分离:
// Java示例使用PreparedStatement
String sql = "SELECT * FROM users WHERE username = ? AND password = ?";
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setString(1, request.getParameter("username"));
stmt.setString(2, request.getParameter("password"));
ResultSet rs = stmt.executeQuery();
该技术的核心优势在于:
- (1)查询结构在预编译阶段确定
- (2)输入数据自动进行类型检查
- (3)特殊字符自动转义处理
1.2 深度防御(Defense in Depth)策略实施
除了参数化查询,我们建议构建多层防御体系:
# Python输入验证示例
import re
def validate_username(username):
pattern = r'^[a-zA-Z0-9_]{4,20}$'
return re.fullmatch(pattern, username) is not None
结合CWE-89漏洞数据库分析,有效的深度防御应包含:
- (1)白名单输入验证(White-list Validation)
- (2)最小权限数据库账户配置
- (3)Web应用防火墙(WAF)规则配置
2. XSS(Cross-Site Scripting)攻击防护方案
2.1 上下文感知输出编码(Context-Aware Encoding)
根据Akamai 2023年网络安全报告,反射型XSS攻击占所有Web攻击流量的42%。不同输出场景需要采用差异化编码策略:
<%= Encode.forHtml(userInput) %>// JavaScript上下文编码示例
var data = "<%= Encode.forJavaScript(userInput) %>";
// URL参数编码示例
2.2 现代前端框架的安全实践
React、Vue等框架默认提供自动转义机制,但需注意危险场景: