Web安全 
1. 什么是XSS攻击?如何防范? 
答案:XSS(跨站脚本攻击)是一种将恶意脚本注入到受信任网站的攻击方式。
防范措施:
- 输入验证和过滤
- 输出编码
- 使用 Content Security Policy (CSP)
- 使用 HttpOnly 标记 cookie
- 使用现代框架的内置XSS保护
- 定期进行安全审计和渗透测试
示例(输出编码):
javascript
function escapeHTML(str) {
    return str.replace(/[&<>'"]/g, tag => ({
        '&': '&',
        '<': '<',
        '>': '>',
        "'": ''',
        '"': '"'
    }[tag] || tag));
}2. 什么是CSRF攻击?如何防范? 
答案:CSRF(跨站请求伪造)是一种强制用户在当前已登录的Web应用程序上执行非本意操作的攻击方式。
防范措施:
- 使用 CSRF Token
- 验证 HTTP Referer 字段
- 使用 SameSite Cookie 属性
- 在请求中使用自定义请求头
- 避免使用 GET 请求进行数据修改操作
- 二次验证敏感操作
示例(CSRF Token):
javascript
// 服务器端生成 token
const csrfToken = generateToken();
res.cookie('XSRF-TOKEN', csrfToken);
// 客户端发送请求时带上 token
fetch('/api/data', {
    method: 'POST',
    headers: {
        'X-XSRF-TOKEN': getCookie('XSRF-TOKEN')
    },
    // ...
});3. 什么是点击劫持(Clickjacking)?如何防范? 
答案:点击劫持是一种视觉欺骗攻击,攻击者使用透明的iframe覆盖在正常网页上,诱导用户点击。
防范措施:
- 使用 X-Frame-Options 响应头
- 使用 Content Security Policy (CSP) 的 frame-ancestors 指令
- 使用 JavaScript 框架保护
- 实施 frame busting 技术
示例:
http
X-Frame-Options: DENY
Content-Security-Policy: frame-ancestors 'none'4. 什么是SQL注入?前端如何配合后端预防SQL注入? 
答案:SQL注入是一种将恶意SQL代码插入应用的输入参数中,并在后端数据库中执行的攻击技术。
前端预防措施:
- 输入验证和过滤
- 使用参数化查询或预处理语句
- 限制输入长度和类型
- 避免直接将用户输入拼接到SQL查询中
- 使用 ORM(对象关系映射)库
示例(参数化查询):
javascript
// 后端 Node.js 示例
const sql = 'SELECT * FROM users WHERE id = ?';
connection.query(sql, [userId], (error, results) => {
    // 处理结果
});5. 什么是中间人攻击?如何防范? 
答案:中间人攻击是攻击者插入到两个通信方之间,能够窃听和篡改他们之间传输的数据的攻击方式。
防范措施:
- 使用HTTPS协议
- 实施 HTTP Strict Transport Security (HSTS)
- 使用证书固定(Certificate Pinning)
- 避免使用公共Wi-Fi,或使用VPN
- 检查证书的有效性
- 使用双因素认证
示例(HSTS 头):
http
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload6. 什么是内容安全策略(CSP)?如何实施CSP? 
答案:内容安全策略是一种额外的安全层,用于检测并削弱某些特定类型的攻击,包括 XSS 和数据注入攻击。
实施CSP:
- 设置 Content-Security-Policy HTTP 头
- 使用 <meta>标签在页面中设置CSP
- 定义允许加载的资源的源
- 禁用不安全的内联代码和eval()
- 报告CSP违规
示例:
http
Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted.cdn.com;7. 什么是子资源完整性(SRI)?如何使用SRI? 
答案:子资源完整性是一种安全功能,允许浏览器检查其获得的资源(例如从 CDN 获得的)是否被篡改。
使用SRI:
- 为资源生成一个加密散列
- 在 <script>或<link>标签中使用 integrity 属性
示例:
html
<script src="https://example.com/example-framework.js" 
        integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC"
        crossorigin="anonymous"></script>8. 什么是安全的密码存储?前端在密码安全方面应注意什么? 
答案:安全的密码存储通常在后端实现,包括使用强哈希算法、加盐等技术。
前端注意事项:
- 使用HTTPS传输密码
- 不在前端存储明文密码
- 实施密码强度检查
- 使用双因素认证
- 限制登录尝试次数
- 在传输前对密码进行哈希(注意:这不能替代服务器端的哈希)
示例(密码强度检查):
javascript
function checkPasswordStrength(password) {
    const minLength = 8;
    const hasUpperCase = /[A-Z]/.test(password);
    const hasLowerCase = /[a-z]/.test(password);
    const hasNumbers = /\d/.test(password);
    const hasNonalphas = /\W/.test(password);
    return password.length >= minLength && hasUpperCase && hasLowerCase && hasNumbers && hasNonalphas;
}9. 什么是CORS预检请求?它与Web安全有什么关系? 
答案:CORS预检请求是浏览器在进行实际的跨源请求之前,发送的一个 OPTIONS 请求,用于检查服务器是否允许实际的请求。
与Web安全的关系:
- 防止未经授权的跨源请求
- 允许服务器指定哪些源可以访问资源
- 控制哪些HTTP方法和头部可以用于跨源请求
- 减少跨站点脚本攻击(XSS)和跨站请求伪造(CSRF)的风险
10. 什么是安全的会话管理?前端如何配合实现安全的会话管理? 
答案:安全的会话管理包括创建、存储和销毁用户会话的安全实践。
前端配合措施:
- 使用 HttpOnly 和 Secure 标记的 cookies
- 实施合理的会话超时
- 在用户登出时清除会话数据
- 使用 CSRF token 保护请求
- 避免在 URL 中传递会话 ID
- 使用 HTTPS 加密所有通信
- 实现重新认证机制用于敏感操作
示例(清除会话数据):
javascript
function logout() {
    // 清除本地存储的会话数据
    localStorage.removeItem('sessionData');
    // 发送登出请求到服务器
    fetch('/api/logout', { method: 'POST' })
        .then(() => {
            // 重定向到登录页面
            window.location.href = '/login';
        });
}