51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

360作为安全公司,服务端开发中如何保障API的安全性?请举例说明如何防止SQL注入、XSS、越权访问,以及如何实现HTTPS加密传输和API密钥管理。

360服务端开发工程师-Golang难度:中等

答案

1) 【一句话结论】
服务端API安全需通过输入验证、输出编码、权限控制、加密传输、密钥管理等多层次技术手段,结合参数化查询防SQL注入、输出编码防XSS、权限校验防越权、HTTPS加密传输、API密钥动态管理,构建纵深防御体系。

2) 【原理/概念讲解】
老师口吻解释各安全概念:

  • SQL注入:攻击者通过输入字段注入恶意SQL语句,绕过验证执行非法操作。类比:在餐厅点菜时,把恶意代码(SQL语句)混进订单里,导致厨房执行错误指令。
  • XSS:攻击者注入恶意脚本,在用户浏览器执行,窃取数据或篡改页面。类比:在网页里放了一个“陷阱”,用户点击后,脚本在用户电脑上运行,偷走个人信息。
  • 越权访问:用户通过伪造或窃取的权限访问其他用户数据。类比:你用别人的身份证进入别人房间,虽然身份证是合法的,但权限不对。
  • HTTPS加密传输:使用TLS/SSL协议,加密客户端和服务器之间的通信,防止中间人窃听或篡改数据。类比:给网络通信装了“加密锁”,数据在传输中被加密,别人截获也看不懂。
  • API密钥管理:为API分配唯一密钥,用于身份认证和权限控制,密钥需安全存储、动态轮换。类比:给每个API一个“身份证”,只有持有正确身份证的用户才能访问,且身份证定期更换,防止被盗用。

3) 【对比与适用场景】

方法/概念定义特性使用场景注意点
SQL注入防护(参数化查询)预编译SQL语句,参数单独处理防止SQL语句被解析数据库操作需支持预编译
XSS防护(输出编码)对用户输入内容编码,转义HTML标签防XSS响应渲染需区分不同上下文(HTML、JavaScript等)
越权访问(权限校验)在业务逻辑中检查用户权限防越权关键操作(如删除、修改)必须在操作前检查
HTTPS(TLS/SSL)服务器证书验证,加密通信加密传输网络通信证书需定期更新,避免中间人攻击
API密钥管理(密钥轮换)动态生成强密钥,定期更换防盗用API身份认证密钥需足够长度,复杂度高

4) 【示例】

  • SQL注入防护(参数化查询):
    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
    }
    
  • XSS防护(输出编码):
    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
    }
    
  • HTTPS加密传输:
    func handleRequest(w http.ResponseWriter, r *http.Request) {
        if !r.TLS { // 强制HTTPS
            http.Error(w, "需要HTTPS", http.StatusForbidden)
            return
        }
        // 处理请求
    }
    
  • API密钥管理(验证):
    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) 【追问清单】

  • 问题1:如何处理动态SQL查询?
    • 回答要点:对于动态SQL,需对参数进行严格的输入验证和过滤,避免拼接恶意SQL,可使用参数化查询的替代方案(如ORM框架的动态查询),但需确保参数安全。
  • 问题2:如何防止复杂XSS攻击?
    • 回答要点:除了输出编码,可结合内容安全策略(CSP),在响应头中设置允许加载的资源来源,限制外部脚本执行,减少XSS影响范围。
  • 问题3:API密钥如何防止泄露?
    • 回答要点:密钥存储在加密的密钥管理系统中,传输时使用HTTPS加密,定期轮换密钥,限制密钥的访问权限,监控密钥使用情况。
  • 问题4:HTTPS中间人攻击如何防范?
    • 回答要点:使用证书 pinning,确保客户端只信任特定证书颁发机构或服务器证书,避免中间人替换证书。
  • 问题5:如何处理跨域请求的CORS安全?
    • 回答要点:配置CORS响应头,限制允许的源、方法、头信息,避免跨域攻击,同时验证请求的Origin和Referer。

7) 【常见坑/雷区】

  • 坑1:只做输入过滤,未用参数化查询,导致SQL注入。
    • 反问:为什么参数化查询比输入过滤更有效?
    • 回答:参数化查询将SQL语句和参数分离,数据库不会将参数当作SQL语句解析,输入过滤可能漏过滤特殊字符。
  • 坑2:输出编码不区分上下文,导致XSS。
    • 反问:为什么需要针对不同上下文(HTML、JavaScript、URL)进行编码?
    • 回答:不同上下文对特殊字符的解析不同,比如HTML中的<会被转义为<,而JavaScript中需要转义为<,否则可能失效。
  • 坑3:权限检查在业务逻辑后,导致越权。
    • 反问:为什么权限检查必须在业务逻辑前?
    • 回答:如果先执行业务逻辑再检查权限,攻击者可能绕过检查,执行非法操作。
  • 坑4:API密钥不轮换,导致长期泄露。
    • 反问:密钥轮换的周期如何确定?
    • 回答:根据密钥泄露风险,通常每3-6个月轮换一次,或当密钥被泄露时立即轮换。
  • 坑5:HTTPS证书过期,导致中间人攻击。
    • 反问:如何避免证书过期?
    • 回答:设置证书自动更新,监控证书有效期,及时续订证书。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1