
1) 【一句话结论】
服务端API安全需通过输入验证、输出编码、权限控制、加密传输、密钥管理等多层次技术手段,结合参数化查询防SQL注入、输出编码防XSS、权限校验防越权、HTTPS加密传输、API密钥动态管理,构建纵深防御体系。
2) 【原理/概念讲解】
老师口吻解释各安全概念:
3) 【对比与适用场景】
| 方法/概念 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| SQL注入防护(参数化查询) | 预编译SQL语句,参数单独处理 | 防止SQL语句被解析 | 数据库操作 | 需支持预编译 |
| XSS防护(输出编码) | 对用户输入内容编码,转义HTML标签 | 防XSS | 响应渲染 | 需区分不同上下文(HTML、JavaScript等) |
| 越权访问(权限校验) | 在业务逻辑中检查用户权限 | 防越权 | 关键操作(如删除、修改) | 必须在操作前检查 |
| HTTPS(TLS/SSL) | 服务器证书验证,加密通信 | 加密传输 | 网络通信 | 证书需定期更新,避免中间人攻击 |
| API密钥管理(密钥轮换) | 动态生成强密钥,定期更换 | 防盗用 | API身份认证 | 密钥需足够长度,复杂度高 |
4) 【示例】
func queryUser(id string) (User, error) {
sql := "SELECT * FROM users WHERE id = ?"
row := db.QueryRow(sql, id) // 参数化,避免SQL注入
var user User
err := row.Scan(&user.ID, &user.Name)
return user, err
}
func renderUser(user User) string {
safeName := html.EscapeString(user.Name) // 对HTML内容编码
return fmt.Sprintf("<div>%s</div>", safeName)
}
func deletePost(postID int, userID int) error {
if post.UserID != userID { // 检查用户是否是帖子所有者
return errors.New("权限不足")
}
return db.Exec("DELETE FROM posts WHERE id = ?", postID).Error
}
func handleRequest(w http.ResponseWriter, r *http.Request) {
if !r.TLS { // 强制HTTPS
http.Error(w, "需要HTTPS", http.StatusForbidden)
return
}
// 处理请求
}
func validateAPIKey(key string) (bool, error) {
if !isValidKey(key) { // 检查密钥是否存在且未过期
return false, errors.New("无效密钥")
}
return true, nil
}
5) 【面试口播版答案】
“面试官您好,关于360服务端API安全,核心是通过多层次防护策略,结合具体技术手段。首先,防止SQL注入,我们采用参数化查询,比如用预编译语句处理用户输入,避免恶意SQL语句执行;其次,XSS防护,对用户输入进行输出编码,转义HTML标签,比如用html.EscapeString处理用户名;然后,越权访问,在业务逻辑中严格校验用户权限,比如删除操作前检查用户是否是帖子所有者;接着,HTTPS加密传输,强制使用TLS/SSL,确保客户端和服务器通信加密,防止中间人窃听;最后,API密钥管理,为每个API分配唯一密钥,动态生成并定期轮换,密钥绑定具体权限,存储时加密,防止泄露。这些措施共同构建了纵深防御体系,保障API安全。”
6) 【追问清单】
7) 【常见坑/雷区】