• 硬核,腾讯内部整理的面向开发人员代码安全指南,适合所有程序员


    现在软件、Web应用、App等程序都已经成为了企业的命脉。数据的安全一直都是企业最关心的问题。

    今天给大家推荐的就是腾讯针对开发人员梳理的代码安全指南,全面的提出API层面的风险点并提出建议和解决方案。

    安全指南使用场景

    安全指南涵盖非常全面,可以用于

    1、日常编程参考

    2、系统扫描策略

    3、安全组件开发

    4、安全漏洞的修复指南

    安全指南分为以下级别

    1、必须

    2、建议

    3、推荐

    安全指南列表清单

    1、C/C++安全指南

    2、JavaScript安全指南

    3、Node安全指南

    4、Go安全指南

    5、Java安全指南

    6、Python安全指南

    图片

    部分安全指南目录截图

    图片

    使用安全指南

    下面给大家举例几个常用安全指南。

    a、【Java安全指南1】SQL语句默认使用预编译并绑定变量

    Web后台系统应默认使用预编译绑定变量的形式创建sql语句,保持查询语句和数据相分离。以从本质上避免SQL注入风险。

    如使用Mybatis作为持久层框架,应通过#{}语法进行参数绑定,MyBatis 会创建 PreparedStatement 参数占位符,并通过占位符安全地设置参数。

    示例:JDBC

    String custname = request.getParameter("name"); 
    String query = "SELECT * FROM user_data WHERE user_name = ? ";PreparedStatement pstmt = connection.prepareStatement( query );pstmt.setString( 1, custname); 
    ResultSet results = pstmt.executeQuery( );
    
    • 1
    • 2
    • 3

    Mybatis

    
    
    • 1
    • 2
    • 3

    应避免外部输入未经过滤直接拼接到SQL语句中,或者通过Mybatis中的传入语句(即使使用,语句直接拼接外部输入也同样有风险。例如中部分参数通过传入SQL语句(即使使用PreparedStatement,SQL语句直接拼接外部输入也同样有风险。例如Mybatis中部分参数通过{}传入SQL语句后实际执行时调用的是PreparedStatement.execute(),同样存在注入风险)。

    b、【Java安全指南2】文件类型限制

    须在服务器端采用白名单方式对上传或下载的文件类型、大小进行严格的限制。仅允许业务所需文件类型上传,避免上传.jsp、.jspx、.class、.java等可执行文件。参考示例:

     String file_name = file.getOriginalFilename();
            String[] parts = file_name.split("\.");
            String suffix = parts[parts.length - 1];
            switch (suffix){
                case "jpeg":
                    suffix = ".jpeg";
                    break;
                case "jpg":
                    suffix = ".jpg";
                    break;
                case "bmp":
                    suffix = ".bmp";
                    break;
                case "png":
                    suffix = ".png";
                    break;
                default:
                    //handle error
                    return "error";
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    【必须】禁止外部文件存储于可执行目录

    禁止外部文件存储于WEB容器的可执行目录(appBase)。建议保存在专门的文件服务器中。

    【建议】避免路径拼接

    文件目录避免外部参数拼接。保存文件目录建议后台写死并对文件名进行校验(字符类型、长度)。建议文件保存时,将文件名替换为随机字符串。

    【必须】避免路径穿越

    如因业务需要不能满足1.2.3的要求,文件路径、文件命中拼接了不可行数据,需判断请求文件名和文件路径参数中是否存在…/或…\(仅windows), 如存在应判定路径非法并拒绝请求。

    c、【JavaScript安全指南1】****【必须】HTML标签操作,限定/过滤传入变量值

    使用innerHTML=outerHTML=document.write()document.writeln()时,如变量值外部可控,应对特殊字符(&, <, >, ", ')做编码转义,或使用安全的DOM API替代,包括:innerText=

    // 假设 params 为用户输入, text 为 DOM 节点// bad:将不可信内容带入HTML标签操作const { user } = params;// ...text.innerHTML = `Follow @${user}`;// good: innerHTML操作前,对特殊字符编码转义function htmlEncode(iStr) {
      let sStr = iStr;
      sStr = sStr.replace(/&/g, "&");
      sStr = sStr.replace(/>/g, ">");
      sStr = sStr.replace(/
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    指南获取
    腾讯内部整理代码安全指南PDF
    链接:https://pan.baidu.com/s/1A7qKzGCDkA3OkcOklHG6dA 提取码:cttc

  • 相关阅读:
    Docker 安装 Mongo
    Java案例:打印折纸的次数
    单链表oj (上),详细的过程分析,每道题有多种解题思路,一定会有所收获
    “系统的UI”——SystemUI
    猿创征文|大数据之离线数据处理总结+思维导图(全面总结)
    类和对象:运算符重载
    [NCTF2019]True XML cookbook
    1. Vue 3.0介绍
    Nginx:过滤模块的实现
    【Linux基本命令归纳整理】
  • 原文地址:https://blog.csdn.net/daremeself/article/details/126751729